【西瓜书笔记】——第四章:决策树

本章对应于周志华——《机器学习》书本P73页,第四章:决策树。

【引言】决策树是基于树结构来进行决策的,可以类比于常见的if条件语句。一般对于二分类,其判断过程就被称为“决策”或“判定”的过程。而前一轮的决策结果便是下一轮的必然前提,最终的决策结论对应了我们所希望的判定结果


1、基本流程

概念】:一颗决策树包含一个根结点、若干个内部结点和若干个叶结点。叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个节点包含的样本集合根据属性测试的结果被划分到子节点中;根节点包含样本全集。从根结点到每个叶节点的路径对应了一个判定测试序列

决策树学习的目的是为了产生一颗泛化性能强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”原则。

生成决策树的过程是递归过程。其逻辑如下:

(1)生成结点node,对所有样本进行属性判别,找到划分能力最强的属性特征(类别标记样本数最多的属性),以该属性作为node生成根结点;
(2)此时所有样本应该已被分为两类(属于该属性的和不属于改属性的)。此时生成node2,分别对两类重复(1)中的划分过程。
(3)以此类推,最后直到只能划分出单一类别为止。

在决策树的基本算法中,又三种情形会导致递归返回:
(1)当前结点包含的样本全属于同一个类别,无需划分;
(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
(3)当前结点包含的样本集合为空,不能划分。

纵观以上三个过程,都遵循了少数服从多数原则,无论是(2)或是(3),最终都以多数类或父类作为最后的分类依据。


2、划分选择

很显然,决策树算法中最关键的部分是选出划分能力最强的属性作为结点的决策准则。我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。

2.1 信息增益

信息熵:是度量样本集合纯度最常用的一种指标。假设当前样本集合D中第k类样本所占的比例为pk(k=1, 2, …|Y|),则D的信息熵定义为(其中,pk取不到1,因为此时一定在上一个结点时已经分类完毕,继承父结点所属的类别):
E n t ( D ) = k = 1 Y p k l o g 2 p k Ent(D) = -\sum_{k=1}^{|Y|}p_klog_2p_k
p = 0 p l o g 2 p = 0 E n t ( D ) 0 l o g 2 Y 当p=0时,plog_2p=0,因此Ent(D)的最小值为0,最大值为log_2|Y|。
因此可见Ent(D)的值越小,则D的纯度越高。

由于决策树是根据离散属性a来进行划分的,因此有多少的离散属性一般就会产生多少个分支结点,而可以计算每一个分支结点(划分属性)上的信息上Dv,其中V表示离散属性a可能的取值{a1, a2, …, aV}

考虑到不同分支结点所包含的样本数不同,给分支结点赋予权重: W = D V D W = \frac {|D^V|}{|D|} DV为属于V类数据集的信息熵,D为整体数据集的信息熵。

可见样本数越多的分支结点影响越大,因为样本数越多,Ent(DV)的值越大,自然上述权重W的值越大

而对于整个样本空间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)
可以看出,该式的含义在于:信息增益=样本空间的信息熵 - (离散属性a的v各分支对应的信息熵 * 对应样本空间中权重)之和 。


【例】:假设有17个西瓜,其中又8个好瓜,9个坏瓜;
共计6种特征分别为:色泽、根蒂、敲声、纹理、脐部、触感;
可以得出如下对应的公式变量:

1、Y代表最终的判别类型的数目,此处|Y|=2代表共两类,分别代表好瓜和坏瓜:
Y = 2 k 1 , 2 |Y|=2,即k∈{1, 2}
2、6种特征代表将A分为了6个分支,每个分支为 A = a 1 , a 2 , a 3 , a 4 , a 5 , a 6 a i A = a_1,a_2,a_3,a_4,a_5,a_6,而针对属性属性a_i
其中都将分为v个不同的例子,代表v种不同的类别:
a = a 1 , a 2 , . . . , a v a 1 a={a^1,a^2,...,a^v},例如a_1
分为三种类别,即V = {青绿、乌黑、浅白},针对每个类别在正例、反例种的比例,继续计算对应的信息熵

【计算】:

p 1 = 8 17 p 2 = 9 17 p_1=\frac {8}{17}代表正例;p_2 =\frac {9}{17}代表反例
因此可以计算样本空间的信息熵:
E n t ( D ) = k = 1 2 p k l o g 2 p k Ent(D)=-\sum_{k=1}^{2}p_klog_2p_k
即: E n t ( D ) = ( p 1 l o g 2 p 1 + p 2 l o g 2 p 2 ) Ent(D) =-( p_1*log_2p_1 +p_2*log_2p_2)
带入p1和p2解得Ent(D)≈0.998
又由属性分支权重的信息熵可知信息增益为:
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)
a 1 a 1 1 绿 以a_1:色泽为例,取a_1^1为青绿,那么:
青绿在17个样本的样本空间中,一共有6个,其中正例(好瓜)3个,反例(坏瓜)3个:
p 1 p 2 6 3 3 p 1 = 3 6 = p 2 已知p_1代表在该属性了别中正例的比例,p_2代表反例。例如此处,属性“色泽”的样本空间中,共6个例子,3正3反,p_1=\frac{3}{6}=p_2
E n t ( D 1 1 ) = ( p 1 l o g 2 p 1 + p 2 l o g 2 p 2 ) Ent(D_1^1)=-(p_1log_2p_1+p_2log_2p_2)
E n t ( D 1 1 ) = ( 3 6 l o g 2 3 6 + 3 6 l o g 2 3 6 ) = 1.000 Ent(D_1^1)=-(\frac{3}{6}log_2\frac{3}{6}+\frac{3}{6}log_2\frac{3}{6})=1.000
D 1 2 以此类推,D_1^2代表关于属性“色泽”中,颜色为“乌黑”的类别
E n t ( D 1 2 ) = ( 4 6 l o g 2 4 6 + 2 6 l o g 2 2 6 ) = 0.918 Ent(D_1^2)=-(\frac{4}{6}log_2\frac{4}{6}+\frac{2}{6}log_2\frac{2}{6})=0.918
同理,对于属性色泽中的“浅白”:
E n t ( D 1 3 ) = ( 1 5 l o g 2 1 5 + 4 5 l o g 2 4 5 ) = 0.722 Ent(D_1^3)=-(\frac{1}{5}log_2\frac{1}{5}+\frac{4}{5}log_2\frac{4}{5})=0.722
以上是针对同一属性下不同判定类别信息熵的计算,接下来计算在样本空间中Dv与D的比值
D 1 1 D = 6 17 D 1 2 D = 6 17 D 1 3 D = 5 17 \frac{|D_1^1|}{D}=\frac{6}{17};\frac{|D_1^2|}{D}=\frac{6}{17};\frac{|D_1^3|}{D}=\frac{5}{17}
带入 G a i n ( D , a 1 ) Gain(D,a_1) 得到:
G a i n ( D ) = E n t ( D ) ( 6 17 1.000 + 6 17 0.918 + 5 17 0.722 ) Gain(D,色泽)=Ent(D)-(\frac{6}{17}*1.000+\frac{6}{17}*0.918+\frac{5}{17}*0.722)
解之得:0.109,这个结果为属性色泽的信息增益

同理可以计算其他的属性类别:
属性根蒂: G a i n ( D a 2 ) = 0.143 Gain(D,a_2)=0.143
属性敲声: G a i n ( D a 3 ) = 0.141 Gain(D,a_3)=0.141
属性纹理: G a i n ( D a 4 ) = 0.381 Gain(D,a_4)=0.381
属性脐部: G a i n ( D a 5 ) = 0.289 Gain(D,a_5)=0.289
属性触感: G a i n ( D a 6 ) = 0.006 Gain(D,a_6)=0.006

显然从以上可知属性纹理的信息增益最大,因此它被选为划分属性;此刻纹理已不再能作为候选划分属性,将对剩下的5个属性进行下一轮划分

划分后的决策树详见树P78页图4.4.


2.2 增益率

【引言】我们自动忽略了编号这一列,如果将编号也算作是特征属性的一种,那么就不是上述的6类特征,而是7类了。再对编号这一类单独求信息熵,计算出来的信息增益为0.998远大于其他属性划分出所得到得信息增益,这说明以编号划分得分支结点纯度达到最大,不具备泛化能力,即每一个编号都对应一个类别。因此,信息增益准则可能会因为偏好的问题产生不利的影响。

因此,在使用信息增益为理论基础的ID3算法之上,C4.5决策树算法采用了”增益率“来选择最优划分属性。定义为:
G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain_ratio(D, a)=\frac {Gain(D,a)}{IV(a)}
其中, I V ( a ) = v = 1 V D v D l o g 2 D v D IV(a)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|} 称为属性a的固有值。从公式中不难看出,属性a的可能取值数目越多(V越大),则IV(a)的值通常会越大。

增益率准则对课取值数目较少的属性有所偏好。因此,C4.5算法不是直接选择增一律最大的候选划分属性,而是使用了启发式规则:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

	·启发式算法:在一个随机的群体寻优过程中,个体能够利用自身或全局的经验来制定各自的搜索过程。(一人经商赚钱,全村下海经商)

2.3 基尼指数

CART决策树就是采用基尼指数来选择划分属性。数据集D的纯度用基尼值来度量
G i n i ( D ) = k = 1 Y k k p k p k = 1 k = 1 Y p k 2 Gini(D)=\sum_{k=1}^{|Y|}\sum_{k'≠k}p_kp_{k'}=1-\sum_{k=1}^{|Y|}p_k^2
Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,数据集D的纯度越高
G i n i Gini _ i n d e x ( D , a ) = v = 1 V D v D G i n i ( D v ) index(D,a)=\sum_{v=1}^{V}\frac{|D^v|}{|D|}Gini(D^v)
因此在属性集合A种选择划分后基尼指数最小的属性作为最有划分属性


【小结】
注:信息熵永远是找最小的,因为越小纯度越高

ID3——信息增益<找最大> G a i n ( D , a ) Gain(D, a)

C4.5——增益率<找最高> G a i n Gain _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) ratio(D, a)=\frac{Gain(D,a)}{IV(a)}

CART(适用于回归和分类)——基尼指数<找最小>:
G i n i ( D ) = 1 k = 1 Y p k 2 Gini(D)=1-\sum_{k=1}^{|Y|}p_k^2


3、剪枝处理

剪枝是决策树学习算法对付过拟合的主要手段,目的是为了尽可能正确分类训练样本。因为划分结点的过程有时会造成决策树分支过多产生过拟合(划分过于精细)。以至于把训练集自身的一些特点当作所有数据都具有的一般性质(如前述的“编号”问题)。

【预剪枝】(降低过拟合,容易欠拟合;时间、计算开销小):对每个结点在划分前先进性估计,若当前结点的划分不能带来决策树泛化性能的提升,则停止划分,并将当前结点标记为叶结点。预剪枝可以降低过拟合风险,减少决策树的训练时间开销和测试时间开销。但其基于贪心策略的本质禁止分支展开,从而导致了预剪枝容易出现欠拟合的风险。(详见书上81页例子已详细标记)

【后剪枝】(降低欠拟合,泛化性能强;时间、计算开销大)先从训练集生成一棵完整的决策树,然后自底向上对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。后剪枝通常比预剪枝决策树保留了更多的分支,而后剪枝决策树欠拟合风险小,泛化性能往往优于预剪枝决策树。但是时间开销会大许多(因为需要生成一颗完全决策树之后再剪)。


4、连续与缺失值

4.1 连续值处理

前述的许多算法都是基于离散属性来生成决策树,但生活中常常会遇到连续属性,因此需要使用连续属性离散化技术如二分法,这也正是C4.5算法所采用的机制。

给定样本空间D,其中连续属性a有n个不同的取值a={a1, a2, …, an},设置阈值t,将a取值不大于t的样本放置在集合 D t D_t^- 中,而将a取值大于t的样本放置在集合 D t + D_t^+ 中。

【连续属性离散化】:显然对于相邻属性取值ai和ai+1,在区间[ai,ai+1)间的任意值所产生的划分结果相同,因此我们在相邻划分区域中考察n-1个元素,取中位点 T a = { a i + a i + 1 2 } 1 i n 1 Ta=\{\frac{a^i+a^{i+1}}{2}\}|1≤i≤n-1| 。可见,Ta是存放中位点(划分点)的一个集合。这样的过程就是连续属性离散化技术。

那么关于信息增益的公式就变成了:
G a i n ( D , a ) = m a x t T a G a i n ( D , a , t ) = m a x t T a E n t ( D ) λ { , + } D t λ D E n t ( D t λ ) Gain(D, a)=max_{t∈T_a}Gain(D,a,t)=max_{t∈T_a}Ent(D)-\sum_{λ∈\{-,+\}}\frac{|D_t^λ|}{|D|}Ent(D_t^λ)
其中Gain(D,a,t)表示样本集D基于划分点t二分后的信息增益。我们规定,选择Gain最大化的划分点

step0:求数据集本身的信息熵Ent(D)
step1:将特征a下属的所有值按从小到大顺序排;
step2:两两相邻,求中位值;
step3:用程序求解每个中位值为划分的所有信息增益,取最大的。
	————计算λ=+和-时的Ent(D^λ),搞清楚pi的分母、D、D^λ的值

划分的过程递归进行,若当前结点划分属性为连续属性,那么该属性还可作为其后代结点继续划分属性。


4.2 缺失值处理

现实任务种常会遇到不完整样本,包括样本的某些属性值缺失,尤其在属性数目较多的情况下,往往会有大量样本出现缺失值。

因此赋予了每个样本 x x 权重 w x w_x ,对属性 a a
ρ \rho :表示无缺失值样本所占的比例;
p ~ k \tilde{p}_k :表示无缺失值样本中第k类所占的比例;
r ~ v \tilde{r}_v :表示无缺失值样本中在属性 a a 上取值 a v a^v 的样本所占的比例;
D ~ \tilde{D} :表示D中在属性a上没有缺失的样本子集;
D ~ v \tilde{D}^v :表示 D ~ \tilde{D} 中在属性a上取值为 a v a^v 的样本子集;
D ~ k \tilde{D}_k :表示 D ~ \tilde{D} 中属于第k类(k=1,2,…, Y |Y| )的样本子集。

显然 D ~ = k = 1 Y D ~ k D ~ = v = 1 V D ~ v \tilde{D}=\cup_{k=1}^{|Y|}\tilde{D}_k且\tilde{D}=\cup_{v=1}^{V}\tilde{D}^v

因此可以将信息增益公式推广为:
G a i n ( D , a ) = ρ G a i n ( D ~ , a ) Gain(D,a)=\rho*Gain(\tilde{D},a)
= ρ ( E n t ( D ~ ) v = 1 V r ~ v E n t ( D ~ v ) ) =\rho*(Ent(\tilde{D})-\sum_{v=1}^{V}\tilde{r}_vEnt(\tilde{D}^v))
且有: E n t ( D ~ ) = k = 1 Y p ~ k l o g 2 p ~ k Ent(\tilde{D})=-\sum_{k=1}^{|Y|}\tilde{p}_klog_2\tilde{p}_k


若给定划分属性,样本在该属性上的值缺省:
①若划分属性a上的取值已知,则将x划入与其取值对应的子结点,且样本权值在子结点中保持为 w x w_x
②若划分属性a上的取值未知,则将x同时划入所有子结点,且样本权值在于属性值a^v对应的子结点中调整为 r ~ v w x \tilde{r}_v·w_x
很显然,这就是让同一个样本以不同的概率划入到不同的子结点中去。

选择取得最大信息增益的属性用于对根结点进行划分。权重的计算按照无缺省值的子集数目来确定,而非原来的样本子集

①【注】关于有缺省值的样本:一般的样本(无缺省),会根据划分条件,进入所对应的划分选项(如:与色泽——青绿对应的就会进入青绿这一个分支)。而对于有缺省值的样本,它会进入所有分支(例如:色泽有三个分支:青绿、浅白、乌黑,则该缺省值的样本会在这三个分支中都走一遍)。

②【注】关于样本的权重:以 { 纹理:清晰<7>、稍糊<5>、模糊<3>} 为例。对于无缺省值的子集而言,清晰的权重w1为 7 15 \frac{7}{15} ,稍糊的权重w2为 5 15 \frac{5}{15} ,模糊的权重w3为 3 15 \frac{3}{15} 。按照上面①注释中的例子,假设现在进来了一个有缺省值的样本,那么它会在清晰、稍糊、模糊这三个分支中都走一趟,并且每次进入一个分支,这个有缺省值的样本会从 7 15 5 15 3 15 \frac{7}{15}变到\frac{5}{15}再变为\frac{3}{15} 。显然,有缺省的样本进入并不会影响权重本身的变化,其只能顺应不同分支下的权重大小而已


5、多变量决策树

5.1引言

将属性想象成坐标轴,那么对于多个属性的单个样本,就是多维空间中的一个数据点。而对样本进行分类就意味着在坐标空间中寻找不同类别样本之间的分类边界,决策树所形成的分类边界有一个明显的特点就是轴平行,即它的分类边界由若干个于坐标轴平行的分段组成。这样的分类边界使得学习结果有较好的可解释性,因为每一段划分都直接对应了某个属性取值(就像在某一个阶段使用了控制变量法)。

但是对于多属性划分时,分类任务往往会非常复杂,这样就需要进行大量的属性测试,并且会产生很大的时间开销。

多变量决策树便是为了解决这一问题而提出的方法。类比于传统的阶梯型决策边界,多变量决策树可以对划分实现斜划分,其原理在于非叶结点不再仅对单个属性,而是对属性的线性组合进行测试


试想,原来的分支结点的作用是根据属性的不同取值(如“色泽”:青绿、浅白、乌黑)将所有样本对应分到不同的分支中去,而对于多变量决策树,分支结点本身就是一个线性回归的判别函数
( θ 1 1 + θ 2 2 + . . . + θ 3 3 ) (θ_1属性1+θ_2属性2+...+θ_3属性3)≤某个值
很显然,对于属性而言,不能再是离散的属性值,而应该是连续的属性值


6、小结

尝试了解C4.5Rule算法,它是一个将C4.5决策树转化为符号规则的新方法。其决策树的每一个分支可以容易地重写为一条规则,但C4.5Rule算法在转化过程中会进行规则前件合并、删减等操作,因此最终规则集的泛化性能甚至远优于原决策树

【本章回顾及关键字】:
信息熵:Ent(D):熵越小,纯度高
信息增益:Gain(D, a):增益越大,划分指标
增益率:Gain_ratio(D, a):增率越高,划分越好
基尼指数:Gini(D):基尼越小纯度越高
剪枝处理(预剪枝、后剪枝):先预、剪后构树;先构数后算、剪
连续属性离散化:相邻离散值取中位点
缺省值处理:无缺值子集、权重
多变量决策树:条件语句函数化,离散属性变量代入线性计算

往往剪枝方法和程度对决策树泛化性能的影响相当显著,甚至在某些带有噪声的数据中能将泛化性能提升25%。


6.1 多变量决策树算法

主要有OC1算法以及Brodley and Utgoff提出的一些算法。
【基本原理】
OC1:先贪心地寻找每个属性地最优权值,在局部优化的基础上对分类边界进行随机扰动寻找更好的边界。

B&U相关算法:直接引入了线性分类器学习的最小二乘法

叶结点上的神经网络:某些算法试图在叶结点熵嵌入神经网络,从而结合两种学习机制的优势(e.g 感知机树——在决策树每个叶结点熵训练一个感知机)


6.2 增量学习

即在收到新样本之后对已学得的模型进行调整,而不用完全重新学习。主要机制是通过调整分支路径熵的划分属性此许来对树进行部分重构,如ID4算法、ID5R、ITI等。

增量学习可以有效地降低每次接收到新样本后地训练时间开销,但经过多次步骤增量学习之后的模型会与基于全部数据训练而得的模型有较大差别。

猜你喜欢

转载自blog.csdn.net/qq_25134999/article/details/82861560