刚开始接触决策树,想边看西瓜书边作个大概的笔记:
一、概述
根据给定训练数据学得一个模型,用这个模型对新示例进行分类,得出最终决策。
(联系实例理解)决策过程最终结论对应了我们希望的判定结果;决策过程中提出的每个判定问题都是对某个属性的“测试”;每次测试结果或是导出结论,或是导出进一步判定问题,其考虑范围是上次决策结果的限定范围之内,如“色泽=青绿”之后再判断“根蒂=?”,则仅考虑青色瓜的根蒂。
叶节点--决策结果;其他节点--属性测试
根节点--包含样本全集;根到叶节点路径--判定测试序列
决策树学习遵循“分而治之”策略
二、划分选择
关键:如何选择最优划分属性。
即随着划分进行,希望决策树分支节点所包含的样本尽可能属于同一类别,即节点“纯度”越来越高。
2.1 信息熵
信息熵:度量样本集纯度,熵值越小,纯度越高。
4.2 信息增益
信息增益越大,则用属性进行划分的“纯度提升”越大。
-假定离散属性a有v个可能的取值,若用属性a来对样本集D进行划分,则有v个分支节点;
-第v个分支节点包含了D中所有在属性a上取值的样本,记为Dv -先算出Dv的信息熵
-再由于不同分支所包含的样本数不同,给分支赋予权重|Dv|/|D|,即样本越多,分支节点影响越大
-则属性a对样本D进行划分,得到的信息增益定义为:
ID3算法计算举例:
问题:现有一批学生共同完成一个课题,其中课题组有14位成员,由右表各个成员的情况来判断是否是合格的组员。
解答:
-由ID3算法,需要分别计算每一种划分的信息熵。
-先选“任务完成情况”来做划分,此时各个学生信息整理如下表:
1)首先计算根节点的熵:
Entropy(是否合格) = Entropy (5,9)
= Entropy (0.36 , 0.64)
= - ( 0.36 log2 0.36 ) - ( 0.64 log2 0.64 )
=0.94
2)再计算各种划分的信息熵:
Entropy( 是否合格 , 任务完成情况 )
= P(完成1/3) * Entropy (3,2) + P(完成2/3) * Entropy (4,0) + P(全部完成) * Entropy (2,3)
= (5/14) * 0.971 + (4/14) * 0.0 + (5/14) * 0.971
= 0.693
3)则用“任务完成程度”特征来做划分时的信息增益值为:
G ( 是否合格 , 任务完成情况 )
= E (是否合格) - E (是否合格 , 任务完成情况)
= 0.94 - 0.693
=0.247
4)分别计算其他特征的信息增益值如下:
5)选择信息增益最大的特征作为划分标准,整理数据得“完成2/3”分支连接叶子节点(熵为零):
6)其他熵不为零的分支进一步划分:
7)依照上面的规则,递归的执行得到一棵决策树:
4.3 增益率
上面介绍中忽略了编号(学号)这一列,如果把“编号”也作为一个划分属性,算出信息增益为0.998(西瓜书中例子,这里例子,这里只想说明很大),远大于其他候选划分属性,因为编号产生14个分支(上例),每个分支仅包含一个样本,即分支节点的分支已经达到最大,但是,这样的决策树没有泛化能力,不能有效预测。
实际上,信息增益对数目较多的属性有所偏好(上面也可以看出),为减少影响,使用“增益率”来选择最优划分属性,具体定义如下:
其中,下面式子称为属性a的“固有值”,属性a的可能取值越多(v越大),则IV的值会越大。
但是,增益率可能对取值较小的属性有所偏好。因此,C4.5不是直接用增益率最大的作为划分属性,而是用启发式:先从候选划分属性中找出【信息增益】高于平均水平的属性,再从中选择【信息增益率】最高的。
4.4 基尼指数
是CART决策树选择划分属性的方法,数据集D的纯度用基尼值来度量,即选择划分后基尼指数最小的属性为最优划分属性。
基尼值直观上反映了从数据集D抽取两个样本,其类别标记不一致的概率。即基尼值越小,数据集D纯度越高,与之前相同形式,属性a的基尼指数定义如下:
三、剪枝处理
针对“过拟合”问题:决策树生成中,为了产生尽可能正确的训练样本,节点划分过程将不断重复,造成分支过多(训练数据样本学的“太好”了),导致把训练集自身特点当作所有数据具有的一般性质而造成“过拟合”,因此用主动去掉一些分支来降低过拟合风险。
基本策略:
1、预剪枝:决策树生成过程中,在每个节点划分前进行估计,若当前结点划分不能带来决策树泛化性能提升,则停止划分,并将当前结点标记为叶节点。
一种策略:预留一部分数据作为“验证集”进行性能评估。
2、后剪枝:先生成完整决策树,再自底向上对非叶节点进行考察,若将该节点对应的子树替换成叶节点能提高决策树的的泛化性能,则将该子树替换成叶节点。
四、连续与缺失值
1、连续值
二分法(C4.5中策略)
2、缺失值