1.基本流程
决策树是是一类常见的机器学习方法,按照二分类或多分类进行分类。决策树是基于树结构来进行决策的,这恰是人类在面临问题时一种很自然的处理机制。例如,我们要对“这是好瓜吗?”这样的问题进行决策时,通常会进行一些列的判断或“子决策”:我们先看“它是什么颜色?”,如果是“青绿色”,则我们再看“它的根蒂是什么形态?”,如果是“蜷缩”,我们再判断“它敲起来是什么声音?”,最后,我们得出最终决策:这是个好瓜。这个决策过程如图1.1所示。
![](https://i-blog.csdnimg.cn/blog_migrate/9fc94535cd7293546db1a5c1c7ba9b2a.png)
显然,决策过程的最终结论是我们想要的结果,例如“是”好瓜,或“不是”好瓜;决策过程中提出的每个判定问题都是对某个属性的的“测试”,例如“色泽=?”“根蒂=?”;一般的,一棵决策树包含一个根节点、若干个内部节点和若干个叶节点;叶节点对应于决策结果(如果为分类任务,则结果为样本多的y值,如果为回归任务,结果为平均值),其他每个及诶按则对应于一个属性测试;每个节点包含的样本集合根据试行测试额结果被划分到子节点中;根节点包含样本全集,从根节点到每个叶节点的路径对应了一个判定测试序列。决策时学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”(divide-and-conquer)策略,如图4.2所示
![](https://i-blog.csdnimg.cn/blog_migrate/e3066e2cd6a492afa01ef153595e7b44.png)
2.划分选择
由算法1.2可知,决策树学习的关键是第8行,即如何选择最优划分属性。一般而言,随着划分过程的不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。选择最优属性的方法有四种:信息增益、信息增益率、GINI系数,这三种由于分类问题计算纯度,如果是回归问题,则使用MSE来选择属性。
2.1 信息增益
“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标,假定当前样本集合D中第k类样本所占比例为pk(k=1,2,...,则D的信息熵定义为
Ent(D)的值越小,代表信息量越少,纯度越高。
假定离散属性a有V个可能的取值{},若使用a对样本集合D进行划分,则会产生V个分支结点,其中第v个分支结点包含了D中所有在属性a上取值为
的样本,记为
。信息增益:
其中代表第V个分支结点所占的权重。
一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的的“纯度提升”越大,因此,我们可以用信息增益来进行决策树的划分属性选择。ID3(ID是iterative Dichotomiser的简称)决策树学习算法及时以信息增益为准则来选择划分属性的。
2.2 增益率
信息增益准则对可能取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,C4.5决策树算法使用“增益率”(gain ratio)来选择最优划分属性。增益率的定义为:
信息增益准则对 可取值数目较少的属性有所偏好,因此C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式,先从候选属性找出信息增益高于平均水平的,再从中选择增益率最高的。
2.3 基尼系数
CART(classification and regression)决策树使用基尼系数(Gini index)来选择最优划分属性,数据D的纯度可用基尼值来度量:
Gini(D)反映了从数据集D中随机抽取两个样本,其类别 标记不一致的概率取值在[0,1]之间,因此Gini(D)越小,则数据集D的纯度越高。
属性a的基尼指数定义为:
因此,我们在划分时选择使得划分后基尼指数最小的属性作为最优属性划分。
案例:
![](https://i-blog.csdnimg.cn/blog_migrate/6cb2dac5c50b012fa28693953e8537a2.png)
然后,我们要计算出当前属性集合{色泽、根蒂、敲声、纹理、脐部、触感}中每个属性的信息增益、增益率、Gini系数。以属性“色泽为例”,他有三个可能的取值:{青绿、乌黑、浅白}。若使用该属性对D进行划分,则得到3个子集,分别记为:D1(色泽=青绿),D2(色泽=乌黑),D3(色泽=浅白)。
子集D1包含编号为{1,4,6,10,13,17}6个样例,其中正例占p1=3/6,反例占3/6;D2包含编号为{2,3,7,8,9,15}的6个样例,其中正、反例分别占p1=4/6,p2=2/6;D3包含编号为{5,11,12,14,16}的5个样例,其中正、反例分别占p1=1/5,p2=4/5。
按照信息增益计算的过程:由此可以算出根节点和三个分支结点的信息熵为:
按色泽分的信息增益为:
类似的可算出按其他属性分的信息增益:
显示按照纹理分的信息增益最大,因此按照纹理分。类似的对每个分支结点进行上述操作,最终得到决策树。
按照增益率计算的过程:先选出信息增益高出平均水平的属性,分别为“纹理”和“脐部”
Gain_ratio(D,纹理) = (a代表纹理属性)
=0.381/-(9/17*log2(9/17)-5/17*log2(5/17)-3/17*log2(3/17)
=0.263
同理可算出:
Gain_ratio(D,脐部) = (a代表脐部属性)
=0.289/-(7/17*log2(7/17)-6/17*log2(6/17)-5/17*log2(5/17)
=0.167
纹理的增益率最大,所以按纹理划分,其他节点以此类推。
按照基尼系数计算的过程:
Gini_index(D,色泽)= 6/17*(1-(3/6)²-(3/6)²)+6/17*(1-4/6)²-(2/6)²)+5/17*(1-(1/5)²-(4/5)²)
=0.427
同理算出:
Gini_index(D,根蒂)=0.422
Gini_index(D,敲声)=0.424
Gini_index(D,纹理)=0.277
Gini_index(D,脐部)=0.345
Gini_index(D,触感)=0.494
纹理的基尼系数最小,因此按照纹理划分。
1.3 剪枝
剪枝的目的是为了防止过拟合(即树长得太茂盛,过分的分类),剪枝分为预剪枝和后剪枝。
预剪枝是在树生成前设置好树的深度或者判断此次分类是否提高验证集准确度,如果不能则不进行分类。
后剪枝是在树生成后,从后往前对结点进行判断,如果减掉这个分支,验证集准确度能否提高,如果能提高则进行剪枝,如果不能则不剪枝。
![](https://i-blog.csdnimg.cn/blog_migrate/a2b9cec809a733010900bcad76cc43b2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/211610f686a7fcb03468cf8b817b3527.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f97008f2537f25d4c3aab91fbf623716.png)
文章转自西瓜书-周志华