《机器学习》 第四章 决策树
第四章 决策树
watermelon
4.1 基本流程
顾名思义,决策树是基于树结构来进行决策的。
这与人们面临决策时很自然的一种处理机制,即通过一系列的判断或“子决策”得出最终决策。决策过程中的每个判定问题都是对某个属性的测试,每个测试结果或是导出下一步的判定的问题,或是导出最终结果。
一般的,一颗决策树包含一个根节点,若干个内部节点和若干个叶节点;叶节点对应于决策结果;其他节点则对应于一个属性测试,每个节点包含的样本集合根据属性测试的结果划分到叶子节点中。从根节点到每个叶子节点的路径对应了一个判定测试序列。其基本流程遵循“分而治之”的策略。
决策树的生成过程是一个递归过程。
在决策树基本算法中有三种情况导致递归返回:
- 当前节点的样本全部属于一个类别,无需划分
- 当前样本的属性集为空或属性取值相同,无法划分(定义为叶子结点,类别为多数样本)
- 当前样本的集合为空,无法划分(标记为父节点的类别)
4.2 划分选择
构建决策树的关键是选择每一次划分的属性;随着划分的不断进行,我们希望样本的纯度越来越高,尽可能属于同一类别。
4.2.1 信息增益
信息熵
:度量样本集合纯度最常用的一种指标。
假设样本集合D中,第k类样本所占的比例为Pk(如好瓜和坏瓜这两种),则信息熵的定义为:
值越小
,纯度越高
信息增益
:考虑到不同分支的样本数不同,给与分支不同的权重,即样本数越大的分支影响越大,
于是可以计算用属性a对样本集合D进行划分的信息增益:
一般来说,信息增益越大,意味着用属性a来划分的所获得的纯度越高。
举例:西瓜数据集2.0,一共有17个样本,两种类别。
一开始时,两种类别,D包含所有样例,正例8/17,反例9/17.所以信息熵为:
下面我们计算色泽的信息增益:
所以“色泽”的信息增益为:
类似的,我们可以计算其他属性的信息增益。
Gain(D,根蒂)=0.143;Gain(D,敲声)=0.141;Gain(D,纹理)=0.381;Gain(D,脐部)=0.289;Gain(D,触感)=0.006;
“纹理”的信息增益最大,所以被选为划分属性。划分结果:
按照此过程继续划分,可以得到:
4.2.2 增益率
上述方法有个问题,如果考虑将编号也作为一个划分属性,其信息增益为0.998,远大于其他。其将产生17个分支,每个分支一个样本,纯度也是最大的。但是这样的决策没有泛化能力,无法对新样本进行预测。
实际上,信息增益对可选取值数目较多的属性有所偏好。
所以著名的C4.5
算法不直接使用上述算法,而是使用增益率来选择最优属性。增益率定义为:
IV(a)称为属性a的固有值,如果属性可取值的数目越多,那么IV(a)的值通常
也会越大。
但是,增益率又会对可取值较少的属性有偏好,所以一般不是直接选择增益率最大的属性,而是使用启发式算法。
先从属性里面找到信息增益比较高的,在从中找出增益率最高的。
4.2.3 基尼指数
CART
决策树使用“基尼指数”来选择划分的属性。数据集D的纯度可以用基尼值来度量:
直观来说,反映了数据集D中随机抽取两个样本,其类别标记不一样的概率,Gini值越小
,纯度越高。
如果改成与公式11相同的形式,则:
最后在候选属性集合A中,选择基尼指数最小的即可。
4.3 剪枝处理
剪枝算法是决策树学习处理“过拟合”的主要手段,在节点划分的过程中,有可能造成决策树的分支过多,这时候可能因为训练样本而训练得“太好了”,以致于过拟合
。所以可以主动去掉一些分支来降低过拟合的风险。
未剪枝的决策树
4.3.1 预剪枝
预剪枝就是在生成过程中,对每个节点划分前进行估计,如果当前节点划分不能带来决策树泛化性能的提升
,则停止划分。
举例:一开始根节点的类别标记为样例最多的类别
预剪枝的决策树
1、用脐部划分之后,验证集的准确率提升为0.714,于是划分确定。
2、之后再对节点2进行划分,根据信息增益挑选“色泽”,划分后,验证集准确率为0.571,取消划分。
……
4.3.2 后剪枝
首先是生成一颗完整的决策树,然后自底向上地对非叶子结点进行考察,如果将子树变成叶子结点,泛化性能有提升,则将子树替换成叶子结点。
举例:先生成完整的决策树。
1、考察节点6-纹理。将节点替换成叶子结点,准确率提升为0.571,剪枝
……
结果为:
对比预剪枝和后剪枝:
可以看出,后剪枝保留了更多的分支,欠拟合风险小,而且泛化性能高于预剪枝;
但是后剪枝需要建立完整的决策树,需要时间开销。
4.4 连续与缺失值
4.4.1 连续值处理
到目前为止,我们讨论的都是离散值,而我们常常会遇到连续值。连续属性往往数目不再有限,此时,我们可以使用连续值离散化处理,比如最简单的二分法
进行处理。这也是C4.5中使用的方法。
样本集合D,给定连续属性a,则取n个不同的取值,将其从小到大排序,则有n-1个划分方法。(样本排序后,两两之间的均值作为候选划分点)。
举例:西瓜数据集3.0。增加两个连续值,密度、含糖率
对于连续值密度:有17个样本,计算得到16个候选划分点的候选值:
同样的,可以得到含糖率的结果为:
对比其他属性,最后可以得到一颗决策树:
注意:当使用了某个连续值属性之后,子树部分还是可以继续使用这个连续属性的。
4.4.2 缺失值处理
现实中,往往会遇到需要某个属性缺失的情况,如果不使用这些数据,可能导致可用的数据不多。
C4.5算法的解决策略:
给定样本集D和属性a,先用没有缺失的子集合根据信息增益等方式挑选出最好的属性。再将缺失属性的样本划分到每一个子树,但是每一个样本有一个新的权重。(其实也就是以一个不同的概率进入不同的分支)
举例:带缺失值的样本集合
1、开始时,有17个样本,各个样本的权值为1。
以属性色泽为例:无缺失值的有14个样本,色泽取值为青绿、乌黑、浅白的样本子集的信息熵为1.0,0.918,0.0
则在无缺失值样本子集D’信息增益为:
样本集D上的信息增益为:
类似的也可以计算出其他属性的信息增益:
纹理的信息增益最大,所以选择纹理进行划分。
对于编号8的样本在属性“纹理”上出现了缺失值,将同时进入三个分支,但是权值不一样,即7/15,5/15,3/15。递归生成:
4.5 多变量决策树
如果把每一个属性看作是一个坐标轴,那么样本分类意味着,在坐标空间中每次寻找一个轴,在这个轴上选择与其他轴平行的分类边界。这个每一段都是与坐标轴平行的,具有较好的可解释性,现实中分类边界比较复杂时,需要比较多次的判断,如下图:
决策树需要经过多次的测试,开销大。
如果能够使用斜的分界面,那么模型将会大为简化。“多变量决策树”
就是干这么一件事。
此类决策树中非叶子节点不再是针对某个属性,而是对属性的线性组合进行测试。与单变量不同,这里不是要得到一个最优划分属性,而是试图建立一个合适的线性分类器。如下图所示: