机器学习:决策树算法

决策树(Decision Tree)是一种简单但是广泛使用的分类器。通过训练数据构建决策树,可以高效的对未知的数据进行分类。决策数有如下优点:决策树模型可以读性好,具有描述性,有助于人工分析;效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。

决策树分类器就像带有终止块的流程图,终止块表示分类结果。开始处理数据集时,我们首先需要测量集合中数据的不一致性(熵),然后寻找最优方案划分数据集,直到数据集中的所有数据属于同一分类。ID3 算法可以用于划分标称型数据集。构建决策树是,我们通常采用递归的方法将数据集转化为决策树。决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,在这些机器根据数据集创建规则时,就是机器学习的过程。

划分数据集的原则是将无序的数据变得更加有序。在划分数据集之前之后信息发生的变化称为信息增益(信息熵)。计算每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。信息熵的计算公式是:

其中,Pi是选择该分类的概率,n是分类的数目。

需要注意的是,决策树可能会产生过多的数据集划分,从而产生过渡匹配数据集的问题。我们可以通过裁剪决策树,合并相邻的无法产生大量信息增益的叶节点,消除过度匹配的问题。

使用决策树算法的一般流程:

  1. 收集数据:可以使用任何方法。
  2. 准备数据:树构建算法只适用于标称型数据,因此数值型数据必须离散化。
  3. 分析数据:可以使用任何方法,构建树完成之后,应该检查图形是否符合预期。
  4. 训练算法:构建树的数据结构。
  5. 测试算法:使用经验树计算错误率。
  6. 使用算法:更好的理解数据的内在含义。

计算给定数据集的香农熵:

from math import log
import operator

def calcShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {}
    for featVec in dataSet:
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntries
        shannonEnt -= prob * log(prob,2)
    return shannonEnt

参考资料: 

《Machine Learning in Action》,Peter Harrington ,Manning Publications

《决策树学习笔记整理》(http://www.cnblogs.com/bourneli/archive/2013/03/15/2961568.html)

你可能感兴趣的:(机器学习)