一、基本流程
决策树是一类常见的机器学习方法,是一个类似于流程图的树形结构。
一颗决策树包含一个根结点、若干个内部结点和若干个叶结点。树的最高层是就是根结点;树内部的每一个结点代表的是对一个特征的测试,树的分支代表该特征的每一个测试结果;叶结点代表对应的决策结果。
下图即为一个决策树的示意描述,内部结点用椭圆表示,叶子结点用矩形表示。该决策树用于对一个用户是否可以偿还债务进行分类预测。
比如新来一个用户:无房产,单身,年收入55K,那么根据上面的决策树,可以预测他无法偿还债务(蓝色虚线路径)
决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”策略,如下图:
决策树构建的基本步骤如下:
- 开始,所有记录看作一个结点
- 三种情形导致递归返回:当前结点包含的样本全属于同一类别,无需划分;当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;当前结点包含的样本集合为空,不能划分。
- 遍历每个变量的每一属性,找到最优划分属性进行划分。
- 对分割后的数据集继续执行2-3步,直到每个节点足够“纯”为止。
二、划分选择
如何选择最优划分属性呢?一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。
(一)信息增益
-
信息熵 是度量样本集合纯度最常用的一种指标。
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k log 2 p k \ Ent(D) = - \sum_{k=1}^{|y|}p_{k}\log_{2}p_{k} Ent(D)=−∑k=1∣y∣pklog2pk
其中,pk为当前样本集合D中第k类样本所占的比例。
Ent(D)的值越小,则D的纯度越高。
假设离散属性a有V个可能的取值{a1, a2, …, av, },若使用a来对样本集D进行划分,则会产生V个分支结点,其中第v个分支结点包含了D中所有在属性a上取值为av的样本,记为Dv。根据信息熵公式可以计算出Dv的信息熵。再考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重|Dv|/|D|,即样本数越多的分支结点的影响越大,于是可计算出用属性a对样本集D进行划分所获得的 “信息增益”。
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) \ Gain(D,a) = Ent(D) - \sum_{v=1}^{V} \frac{|D^{v}|}{|D|} Ent(D^{v}) Gain(D,a)=Ent(D)−∑v=1V∣D∣∣Dv∣Ent(Dv)
一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。
因此,我们可以选择信息增益最大的属性a作为决策树的划分属性。
ID3决策树学习算法就是以信息增益为准则来选择划分属性的。
以上图所示的数据集为例,该数据集包含10个训练样例,用于学习一颗能预测一个新用户是否可以偿还债务的决策树。显然,|y|=2。在决策树学习开始时,根节点包含D中所有的样例,其中正例占p1=0.3,反例占p2=0.7。根结点的信息熵为
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k log 2 p k = − ( 0.3 log 2 0.3 + 0.7 log 2 0.7 ) = 0.881 \ Ent(D) = - \sum_{k=1}^{|y|}p_{k}\log_{2}p_{k} = - (0.3 \log_{2}0.3+0.7 \log_{2}0.7) =0.881 Ent(D)=−∑k=1∣y∣p