决策树(三)| 决策树生成(ID3算法)+ 决策树剪枝 | 《统计学习方法》学习笔记(十九)

一、决策树的生成

1. ID3算法

算法核心:在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。

具体方法:从根结点(root node)开始,对结点计算所有可能的特征信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择未知。最后得到一个决策树。ID3相当于用极大似然法进行概率模型的选择。

算法:ID3算法
输入:训练数据集D,特征集A,阈值ϵ\epsilon;
输出:决策树T

(1)若D中所有实例属于同一类CkC_k,则T为单结点数,并将类CkC_k作为该结点的类标记,返回T;
(2)若A=A=\emptyset,则T为单结点树,并将D中实例数最大的类CkC_k作为该结点的类标记,返回T;
(3)否则,按信息增益算法计算A中各特征对D的信息增益,选择信息增益最大的特征AgA_g;
(4)如果AgA_g的信息增益小于阈值ϵ\epsilon,则置T为单结点数,并将D中实例数最大的类CkC_k作为该结点的类标记,返回T;
(5)否则,对AgA_g的每一可能值aia_i,依Ag=aiA_g=a_i将D分割为若干非空子集DiD_i,将DiD_i中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
(6)对第i个子结点,以DiD_i为训练集,以AAgA-{A_g}为特征集,递归地调用步(1)~步(5),得到子树TiT_i,返回TiT_i

:对贷款申请的训练数据集,利用ID3算法建立决策树。

:利用信息增益例子的结果,由于特征A3A_3(有自己的房子)的信息增益值最大,所以选择特征A3A_3作为根结点的特征。它将训练数据集D划分为两个子集D1D_1A3A_3取值为“是”

D2D_2A3A_3取值为“否”)。由于D1D_1只有同一类的样本点,所以它成为一个叶结点,结点的类标记为“是”。

D2D_2则需从特征A1A_1(年龄),A2A_2(有工作)和A4A_4(信贷情况)中选择新的特征。计算各个特征的信息增益:
g(D2,A1)=H(D2)H(D2A1)=0.9180.667=0.251g(D2,A2)=H(D2)H(D2A2)=0.918g(D2,A4)=H(D2)H(D2A4)=0.474 g(D_2,A_1)=H(D_2)-H(D_2|A_1)=0.918-0.667=0.251 \\ g(D_2,A_2)=H(D_2)-H(D_2|A_2)=0.918 \\ g(D_2,A_4)=H(D_2)-H(D_2|A_4)=0.474
选择信息增益最大的特征A2A_2(有工作)作为结点的特征。由于A2A_2有两个可能取值,从这一结论引出两个子结点:一个对应“是”(有工作)的子结点,包含3个样本,它们属于同一类,所以这是一个叶结点,类标记为“是”;另一个是对应“否”(无工作)的子结点,包含6个样本,它们也属于同一类,所以这也是一个叶结点,类标记为“否”。
这样生成一个决策树,该决策树只用了两个特征,该决策树只用了两个特征(有两个内部结点)。
决策树(三)| 决策树生成(ID3算法)+ 决策树剪枝 | 《统计学习方法》学习笔记(十九)
ID3算法只有树的生成,所以该算法生成的树容易产生过拟合。

2. C4.5的生成算法

本质:与ID3算法相似,C4.5算法对ID3算法进行了改造,在生成的过程中,用信息增益比来选择特征。

算法:C4.5的生成算法

输入:训练数据集D,特征集A,阈值ϵ\epsilon;

输出:决策树T

(1)如果D中所有实例属于同一类CkC_k,则置T为单结点树,并将CkC_k作为该结点的类,返回T;

(2)如果A=A=\emptyset,则置T为单结点树,并将D中实例数最大的类CkC_k作为该结点的类,返回T;

(3)否则,按信息增益比计算A中各特征对D的信息增益比,选择信息增益比最大的特征AgA_g;

(4)如果AgA_g的信息增益比小于阈值ϵ\epsilon,则置T为单结点树,并将D中实例数最大的类CkC_k作为该结点的类,返回TT

(5)否则,对AgA_g的每一可能值aia_i,依Ag=aiA_g=a_i将D分割为子集若干非空DiD_i,将DiD_i中实例最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;

(6)对结点ii,以DiD_i为训练集,以A{Ag}A-\{A_g\}为特征集,递归地调用步(1)~步(5),得到子树TiT_i,返回TiT_i.

二、 决策树的剪枝

决策树生成算法递归地产生决策树,直到不能继续下去为止,这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树,因此,解决的方法是考虑决策树的复杂度,对已生成的决策树进行简化。

剪枝(pruning):在决策树学习中将已生成的树进行简化。具体地,剪枝从已生成的树上裁掉一些子树或叶结点,并将其根结点或父结点作为新的叶结点,从而简化分类树模型。

决策树的剪枝往往通过极小化决策树整体的损失函数(loss function)或代价函数(cost function)来实现。设树T的叶结点个数为T|T|,t是树T的叶结点,该叶结点有NtN_t个样本点,其中k类的样本点有NtkN_{tk}个,k=1,2,...,Kk=1,2,...,KHt(T)H_t(T)为叶结点t上的经验熵,α0\alpha \geq 0为参数,则决策树学习的损失函数定义为
Cα(T)=t=1TNtHt(T)+αT(1) C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T| \tag{1}
其中经验熵为
Ht(T)=kNtkNtlogNtkNt H_t(T)=-\sum_k\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t}
在损失函数中,将式(1)右端的第1项记作
C(T)=t=1TNtHt(T)=t=1Tk1KNtklogNtkNt C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k-1}^KN_{tk}log\frac{N_{tk}}{N_t}
这时有
Cα(T)=C(T)+αT(2) C_\alpha(T)=C(T)+\alpha|T| \tag{2}
其中,C(T)C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,T|T|表示模型复杂度,参数a0a\geq 0控制两者之间的影响。较大的α\alpha促使选择较简单的模型(树),较小的促使选择较复杂的模型的模型(树)。a=0a=0意味着值考虑模型与训练数据的拟合程度,不考虑模型的复杂度。

剪枝本质:当α\alpha确定时,选择损失函数最小的模型,即损失函数最小的子树,当α\alpha值确定时,子树越大,往往与训练数据的拟合越好,但是模型的复杂度就越高;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好。损失函数正好表示了对两者的平衡。

可以看出,决策树生成值考虑了通过提高信息增益(或信息增益比)对训练数据进行更好的拟合。而决策树剪枝通过优化损失函数还考虑了减小模型复杂度。决策树生成学习局部的模型,而决策树剪枝学习整体的模型

式(1)或式(2)定义的损失函数的极小化等价于正则化的极大似然估计,所以,利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择。

算法:树剪枝算法

输入:生成算法产生的整个树T,参数α\alpha

输出:修剪后的子树TαT_\alpha

(1)计算每个结点的经验熵

(2)递归地从树的叶结点向上回缩。

决策树(三)| 决策树生成(ID3算法)+ 决策树剪枝 | 《统计学习方法》学习笔记(十九)

设一组叶结点回缩到其父结点之前与之后的整体树分别是TBT_BTAT_A,其对应的损失函数值分别是Cα(TB)C_\alpha(T_B)Cα(TA)C_\alpha(T_A),如果
Cα(TA)Cα(TB)(3) C_\alpha(T_A)\leq C_\alpha(T_B) \tag{3}
则进行剪枝,即将父结点变为新的叶结点。

(3)返回(2),直至不能继续为止,得到损失函数最小的子树TαT_\alpha

注意式(3)只需考虑两个树的损失函数的差,其计算可以再局部进行。所以,决策树的剪枝算法可以由一种动态规划的算法实现。