决策树是根据树结构来进行决策的,决策树的最终结果对应了我们所希望的判定结果。一般的一棵树包含一个根节点、若干个内部节点和若干个叶节点;叶结点对应了决策树的结果,其他每个节点对应于一个属性测试;每个结点根据属性测试的结果别划分到子结点中;根结点包含样本的全集。
决策树的生成是一个递归过程,有三种情况会导致递归返回(也就是出结果):
1、当前结点包含的样本属性全部属于同一类别,无需划分
2、当前属性集为空,或者样本在所有属性值相同,无法划分。称为死结点,设定为所含样本最多的类别
3、当前结点包含的样本集合为空,不能划分。称为死结点,设定为其父结点所含样本最多的类别
情形2是利用当前结点的后验分布;情形3是把父结点的原本分布作为当前结点的先验分布。
划分选择
决策树的关键在于如何选择最优划分属性,我们希望决策树的分支结点所包含的样本尽可能的属于同一类别,即结点的纯度越高越好。
信息增益
“信息熵”是度量样本纯度最常用的指标,
假设样本集D中的第k类样本所占的比例$p_k,(k=1,2,3,...|y|)$,则D的信息熵为:
$Ent(D)=-\sum_{k=1}^{|y|}p_k\log _2p_k$
Ent(D)的值越小,则D的纯度越高。
我们记为$D^v$为数据集D在第v个分结点在属性a上的取值。我们根据上式计算$D^v$的信息熵,
不同结点包含的样本数不同,我们给分支点赋予权重$\frac{|D_v|}{D}$,即样本数越多的分支点影响越大,于是可以计算出属性a对样本集D进行划分所获得的“信息增益”。
$Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^v|}{D}Ent(D^v)$
信息增益越大,意味着使用属性s来进行划分所获得的“纯度提升”越大,所以我们使用信息增益来进行决策树的划分属性选择。
例题:计算以下西瓜集的信息熵和信息增益
其中正例$p_1=\frac{8}{17}$,反例$p_2=\frac{9}{17}$,所以根结点的信息熵为:
$$Ent(D)=-\sum_{k=1}^{2}p_k\log_2p_k=-(\frac{8}{17}\log_2\frac{8}{17}+\frac{9}{17}\log_2\frac{9}{17})=0.998$$
然后我们要计算出当前属性集合{色泽、根蒂、敲声、纹理、脐部、触感}中每个属性的信息增益。以色泽为例,色泽有三个取值:{青绿、乌黑、浅白},若使用该属性对D进行划分,则可得到3个子集分别为$D^1$(色泽=青绿)有6个样例,正例$p_1=\frac{3}{6}$反例$p_2=\frac{3}{6}$
$D^2$(色泽=乌黑)有6个样例,正例$p_1=\frac{4}{6}$反例$p_2=\frac{2}{6}$
$D^3$(色泽=浅白)有5个样例,正例$p_1=\frac{1}{5}$反例$p_2=\frac{4}{5}$
分别计算信息熵
$$Ent(D^1)=-(\frac{3}{6}\log_2\frac{3}{6}+\frac{3}{6}\log_2\frac{3}{6})=1.000$$
$$Ent(D^2)=-(\frac{4}{6}\log_2\frac{4}{6}+\frac{2}{6}\log_2\frac{2}{6})=0.918$$
$$Ent(D^2)=-(\frac{1}{5}\log_2\frac{1}{5}+\frac{4}{5}\log_2\frac{4}{5})=0.722$$
计算色泽的信息增益:
$$Gain(D,色泽)=Ent(D)-\sum_{v=1}^{3}\frac{|D^v|}{|D|}Ent(D^v) \\
=0.998-(\frac{6}{17}*1.000+\frac{6}{17}*0.918+\frac{5}{17}*0.722) \\
=0.109$$
类似的我们可以计算出其他属性的信息增益:
Gain(D,根蒂)=0.143; Gain(D,敲声)=0.141; Gain(D,纹理)=0.381; Gain(D,脐部)=0.289; Gain(D,触感)=0.006.
显然属性“纹理”的信息增益最大,于是他被选为划分属性。
以图4.3中第一个分支结点(“纹理=清晰”)为例,该结点包含的样例集合$D^1$中有编号{1,2,3,4,5,6,8,10,15},9个样例,可用熟悉集合为{色泽、根蒂、敲声、脐部、触感},基于$D^1$计算出各属性的信息增益:
$Gain(D^1,色泽)=0.043$; $Gain(D^1,根蒂)=0.458$; $Gain(D^1,敲声)=0.331$; $Gain(D^1,脐部)=0.458$; $Gain(D^1,触感)=0.458$;
“根蒂”“脐部”“触感”3个属性均取得最大值的信息增益,最终得到:
增益率
根据上面的介绍我们有意的忽略了“编号”,如果把“编号”也作为属性进行划分,计算它的信息增益为0.998,远大于其他划分的属性,(解释:“编号”将产生17个分支,每个分支结点仅包含一个样本,这些分支结点的纯度已经达到最大值,然而这样的决策树不具备泛化能力。)
实际上,信息增益准则对可取值数目较多的属性有所偏好,为了减少这偏好带来的影响,使用“增益率”来进行划分属性。增益率定义为:
$$Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}$$
其中:
$$IV(a)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}\log_2\frac{|D^v|}{|D|}$$
称为属性a的固定值,属性a的可能取值越多(V越大),则IV(a)的值通常会越大。对上道题目的数据集IV(触感)=0.94(V=2),IV(色泽)=1.580(V=3),IV(编号)=4.088(V=17)。
但是增益率多取值较少的属性有一定的偏好,所以:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
基尼指数
基尼指数定义为:$$Gini(D)=\sum_{k=1}^{|y|}\sum_{k'\not\equiv k}p_kp_{k'}$$
$$=1-\sum_{k=1}^{|y|}p_k^2$$
基尼指数反应了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此Gini(D)越小,这数据集D的纯度越高。属性a的基尼指数定义为:
$$Gini\_index(D,a)=\sum_{v=1}^{V}\frac{|D^v|}{|D|}Gini(D^v)$$
于是我们选择在属性集合A中,使得划分后基尼指数最小的属性作为最优划分属性,$a^*=arg\min_{a\in A}Gini\_index(D,a)$
1