概念
决策树(Decision Tree)是在已知各种情况发生概率的情况下,通过构成决策树来求取净现值的期望值大于0的概率,是直观运用概率分析的一种图解法。通俗的讲,决策树就是带有特殊含义的数据结构中的树结构,其每个根结点(非叶子结点)代表数据的特征标签,根据该特征不同的特征值将数据划分成几个子集,每个子集都是这个根结点的子树,然后对每个子树递归划分下去,而决策树的每个叶子结点则是数据的最终类别标签。对于一个样本特征向量,则从决策树的顶端往下进行分类,直到根结点,得到的类别标签就是这个样本向量的类别。
如:
特点
决策树的构造
要构造决策树,就需要根据样本数据集的数据特征对数据集进行划分,直到针对所有特征都划分过,或者划分的数据子集的所有数据的类别标签相同。然而要构造决策树,面临的第一个问题是先对哪个特征进行划分,即当前数据集上哪个特征在划分数据分类时起决定性作用。因此,为了找到决定性的特征,划分出最好的结果,我们必须评估每个特征。
决策树的一般流程:
(1)收集数据:可以使用任何方法。
(2)准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。
(3)分析数据:可以使用任何方法,构造树完成后,我们应该检查图形是否符合预期。
(4)训练算法:构造树的数据结构
(5)测试算法:使用经验树计算错误率
(6)使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义
信息增益
划分数据集的最大原则是:将无序的数据变得更加有序。我们采用量化的方法来度量数据的内容,组织杂乱无章数据的一种方法就是使用信息论度量信息,信息论是量化处理信息的分支科学。我们可以在划分数据前后使用信息论量化度量信息的内容。
在划分数据集前后信息发生的变化成为信息增益,知道如何计算信息增益,就可以计算根据每个特征划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。
集合信息的度量方式成为香农熵、信息熵或者简称为熵,熵在热力学中的物理意义是体系混乱程度的度量,而在信息科学中也可看成是信息混乱程度的度量,熵越大,信息越混乱。实际上熵定义为信息的期望值,要明确这个概念,就要知道信息的定义。如果待分类的事务可能划分在多个分类之中,则符号Xi的信息定义为
——其中p(xi)是选择该分类的概率
为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值,通过下面的公式得到:
——其中n是分类的数目
计算熵:
# 计算给定数据集的香农熵(根据dataSet中所有的特征向量的类别计算熵)
# dataSet:给定数据集
# 返回shannonEnt:香农熵
def calcShannonEnt(dataSet):
numEntries = len(dataSet)
labelCounts = {} # 创建一个空字典
# for循环:使labelCounts字典保存多个键值对,并且以dataSet中数据的类别(标签)为键,该类别数据的条数为对应的值
for featVec in dataSet:
currentLabel = featVec[-1]
if currentLabel not in labelCounts.keys(): # k