统计学习方法第5章【2】----决策树

5.3 决策树的生成

5.3.1 ID3算法

核心是在决策树各个节点上应用信息增益准则,递归地构建决策树。

算法5.2(ID3算法)

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

输出:决策树T

(1)若D中所有实例属于第一类C_{k},则T为单结点树,并将类C_{k}作为该节点的标记,返回T

(2)若A=\phi,则T为单结点树,并将D中实例最大的类C_{k}作为该结点的类标记,返回T

(3)否则,按算法5.1计算A中各特征对D的信息增益,选择信息增益最大的特征A_{g}

(4)如果A_{g}的信息增益小于阈值\varepsilon,则置T为单结点树,并将D中实例最大的类C_{k}作为该结点的类标记,返回T

(5)否则,对A_{g}的每一个可能值a_{i},依A_{g}=a_{i}将D分割为若干非空子集D_{i},将D_{i}中实例数最大的类作为标记,构建子结点,由结点及其子结点构成数T,返回T

(6)对第i个子结点,以D_{i}为训练集,以A-\left \{A_{g} \right \}为特征集,递归地调用(1)---(5)步,得到子树T_{i},返回T_{i}

5.3.2  C4.5的生成算法

C4.5算法对ID3算法进行了改进,C4.5在生成的过程中,用信息增益比来选择特征

算法5.3(C4.5的生成算法)

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

输出:决策树T

(1)若D中所有实例属于第一类C_{k},则T为单结点树,并将类C_{k}作为该节点的标记,返回T

(2)若A=\phi,则T为单结点树,并将D中实例最大的类C_{k}作为该结点的类标记,返回T

(3)否则,按式(5.10)计算A中各特征对D的信息增益比,选择信息增益比最大的特征A_{g}

(4)如果A_{g}的信息增益比小于阈值\varepsilon,则置T为单结点树,并将D中实例最大的类C_{k}作为该结点的类标记,返回T

(5)否则,对A_{g}的每一个可能值a_{i},依A_{g}=a_{i}将D分割为若干非空子集D_{i},将D_{i}中实例数最大的类作为标记,构建子结点,由结点及其子结点构成数T,返回T

(6)对第i个子结点,以D_{i}为训练集,以A-\left \{A_{g} \right \}为特征集,递归地调用(1)---(5)步,得到子树T_{i},返回T_{i}

5.4 决策树的剪枝

决策树生成算法会出现过拟合,原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出复杂的决策树。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。

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

剪枝通过极小化决策树整体的损失函数或代价函数来实现。设树的叶结点个数为|T|,t是树T的叶结点,该叶结点有N_{t}个样本点,其中k类的样本点有N_{tk}个,k=1,2,...,K,H_{t}(T)为叶结点t上的经验熵,\alpha \geqslant 0为参数,则决策树学习的损失函数可以定义为

C_{\alpha }\left ( T \right )=\sum_{t=1}^{|T|}N_{t}H_{t}(T)+\alpha |T|                                      (5.11)

其中经验熵为

H_{t}(T)=-\sum_{k}\frac{N_{kt}}{N_{t}}log_{2}\frac{N_{kt}}{N_{t}}                                            (5.12)

在损失函数中,将式(5.11)右端的第1项记作

C\left ( T \right )=\sum_{t=1}^{|T|}N_{t}H_{t}(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^{K}{N_{tk}}log_{2}\frac{N_{kt}}{N_{t}}            (5.13)

 C_{\alpha }\left ( T \right )=C\left ( T \right )+\alpha |T|                                                    (5.14)

C\left ( T \right )表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示模型复杂度,参数\alpha \geqslant 0控制两者之间的影响。较大的\alpha促使选择较简单的模型(树),较小的\alpha促使选择较复杂的模型(树)。\alpha = 0表示只考虑模型与训练数据的拟合度,不考虑模型的复杂度。

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

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

算法5.4(树的剪枝算法)

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

输出:修剪后的子树T_{\alpha }

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

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

设一组叶结点回缩到其父结点之前与之后的整体树分别为T_{B }T_{A },其对应的损失函数值分别是C_{\alpha }(T_{B})C_{\alpha }(T_{A}),如果C_{\alpha }(T_{A})\leq C_{\alpha }(T_{B})                                                                                 (5.15)           

则进行剪枝,即将父结点变为新的叶结点。

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

猜你喜欢

转载自blog.csdn.net/weixin_42702666/article/details/89317963