决策树算法原理理解笔记
1、有关的几个概念
以下面的表格里的数据作为样本:
信息熵
信息熵 用于评估一个因素指标的重要程度,它可以解释为需要花费多少次判断,才可以消除概率事件的不确定性。
例如:一盏只有D = { on / off } 两种状态的灯,它需要1次判断才能对它的状态进行确定,而如果是一盏一直亮着的灯,则不需要判断就能确定它的状态,因此它的信息熵为0。
信息熵在数学意义上解释的公式如下:
样本的最终有两个分类结果:“是” 和 “否” ,因此样本总体的信息熵为:
条件熵
条件熵 表示在已知随机变量X的条件下,随机变量Y的不确定性
条件熵在数学意义上解释的公式如下:
在样本中Y = { 是,否 },例如把性格类别作为第一次分类,性格类别有2个属性X = { 不好,好 }
因此,两个属性对应信息熵分别为:
两个属性发生的概率为:
所以性格类别对应的条件熵为:
信息增益
如何选择分类的类别,需要看信息增益。信息增益越大,该类别对分类结果的影响也越大。
它可以解释为:引入某个条件后,不确定性减小了,信息增益越大,说明引入的条件能更好的消除不确定性。
信息增益在数学意义上解释的公式如下:
所以,在样本中,第一次分类的性格类别对应的信息增益为:
根据信息增益进行决策的过程,称为 ID3 决策树算法。
信息增益率
信息增益这个指标有一定的缺点,它天然偏向于选择那些分支比较多的类别。
这种偏向性是必须消除的,因此提出了另一个指标:信息增益率。
信息增益率在数学意义上解释的公式如下:
g(D,A)是标签分类信息熵,也就是之前计算过的信息增益。
SplitInfo(A)是子集划分信息熵,可以视作划分多个分支所需要花费的成本。
根据信息增益率进行决策的过程,称为 C4.5 决策树算法。
2、代码实例
数据集
决策树
基本代码部分
构造数据集
#构造数据集
#下面是类别 下面是各类别的属性
#年龄Age: 小于30为0 30~40为1 大于40为2
#收入Income: 低为0 中等为1 高为2
#工作性质Job: 不稳定为0 稳定为1
#信用评分Credit: 差为0 好为1
#购买决策Y/N
def createDataSet():
dataSet = [[0, 2, 0, 0, 'N'],
[0, 2, 0, 1, 'N'],
[1, 2, 0, 0, 'Y'],
[2, 1, 0, 0, 'Y'],
[2, 0, 1, 0, 'Y'],
[2,