第5章 决策树

ID3 算法

特征选择准则:信息增益
具体方法:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树。ID3相当于用极大似然法进行概率模型的选择。
算法 1.2 (ID3算法)
输入:训练数据集DD,特征集A,阈值εε
输出:决策树TT
(1) 若D中所有实例属于同一类CkCk,则TT为单结点树,并将类Ck作为该结点的类标记,返回TT;
(2) 若A=,则TT为单结点树,并将D中实例数最大的类CkCk作为该结点的类标记,返回T;
(3) 否则,按算法1.1计算AA中各特征对D的信息增益,选择信息增益最大的特征AgAg
(4)如果AgAg的信息增益小于阈值εε,则置TT为单结点树,并将D中实例数最大的类CkCk作为该结点的类标记,返回TT
(5)否则,对Ag的每一可能只aiai,依Ag=aiAg=aiDD分割为若干非空子集Di,将DiDi中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树TT,返回T;
(6)对第ii个子结点,以Di为训练集,以A{Ag}A−{Ag}为特征集,递归地调用步骤(1)~(5),得到子树TiTi,返回TiTi.

C4.5算法

特征选择准则:信息增益比
算法 1.2 (C4.5算法)
输入:训练数据集DD,特征集A,阈值εε
输出:决策树TT
(1) 若D中所有实例属于同一类CkCk,则TT为单结点树,并将类Ck作为该结点的类标记,返回TT;
(2) 若A=0,则T为单结点树,并将D中实例数最大的类Ck作为该结点的类标记,返回TT;
(3) 否则,计算A中各特征对DD的信息增益比,选择信息增益比最大的特征Ag
(4)如果AgAg的信息增益比小于阈值εε,则置TT为单结点树,并将D中实例数最大的类CkCk作为该结点的类标记,返回TT
(5)否则,对Ag的每一可能只aiai,依Ag=aiAg=aiDD分割为若干非空子集Di,将DiDi中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树TT,返回T;
(6)对第ii个子结点,以Di为训练集,以A{Ag}A−{Ag}为特征集,递归地调用步骤(1)~(5),得到子树TiTi,返回TiTi.
算法 1.3(树的剪枝算法)
输入:生成算法产生的整个树T,参数a;
输出:修剪后的子树
(1)计算每个结点的经验熵
(2)递归地从树的叶结点向上回缩。
(3)设一组叶结点回缩到其父结点之前与之后的整体树分别为TBTBTATA,其对应的损失函数值分别是Cα(TB)Cα(TB)Cα(TA)Cα(TA),如果

Cα(TA)Cα(TB)Cα(TA)≤Cα(TB)
则进行剪枝,即将父结点变为新的叶结点。
(3)返回(2),直至不能继续为止,得到损失函数最小的子树Tα

CART算法

CART既可以用于分类,也可以用于回归。
CART算法由以下两步组成:
(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

CART生成

决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则。
算法 5.6(CART生成算法)
输入:训练数据集DD,停止计算的条件:
输出:CART决策树
根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:
(1)设结点的训练数据集为D,计算现有特征对该数据集的基尼指数,此时,对每一个特征AA,对其可能取的每个值a,根据样本点对A=aA=a的测试为“是”或“否”将DD分割成D1D2D2两部分,计算A=aA=a的基尼指数。
(2)在所有可能的特征AA以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
(3)对两个子结点递归调用(1),(2),直至满足停止条件。
(4)生成CART决策树。
算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征。

CART剪枝

CART剪枝算法由两步组成:首先从生成算法产生的决策树T_0底端开始不断剪枝,直到T_0的根结点,形成一个子树序列{T_0,T_1,…T_n};然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。
CART剪枝算法
输入:CART算法生成的决策树T0T0
输出:最优决策树Tα;
(1)设k=0,T=T0k=0,T=T0;
(2)设α=+α=+∝
(3)自下而上对各内部结点tt计算C(Tt)|Tt|以及

g(t)=C(t)C(Tt)|Tt|1g(t)=C(t)−C(Tt)|Tt|−1
α=min(α,g(t))α=min(α,g(t))

这里,TtTt表示以tt为根结点的子树,C(Tt)是对训练数据的预测误差,|Tt||Tt|TtTt的叶结点个数。
(4)自上而下地访问内部结点tt,如果有g(t)=α,进行剪枝,并对叶结点tt以多数表决法决定其类,得到树T
(5)设k=k+1,αk=α,Tk=Tk=k+1,αk=α,Tk=T
(6)如果TT不是由根结点单独构成的树,则回到步骤(4)
(7)采用交叉验证法在子树序列T0T1...Tn中选取最优子树Tα.

上面3个算法的区别:
ID3:信息增益
C4.5:信息增益比
CART:基尼指数
1. 在选择分裂属性的时候,训练样本存在缺失值,如何处理?
假如你使用ID3算法,那么选择分类属性时,就要计算所有属性的熵增(信息增益,Gain)。假设10个样本,属性是a,b,c。在计算a属性熵时发现,第10个样本的a属性缺失,那么就把第10个样本去掉,前9个样本组成新的样本集,在新样本集上按正常方法计算a属性的熵增。然后结果乘0.9(新样本占raw样本的比例),就是a属性最终的熵。

2.分类属性选择完成,对训练样本分类,发现属性缺失怎么办?
比如该节点是根据a属性划分,但是待分类样本a属性缺失,怎么办呢?假设a属性离散,有1,2两种取值,那么就把该样本分配到两个子节点中去,但是权重由1变为相应离散值个数占样本的比例。然后计算错误率的时候,注意,不是每个样本都是权重为1,存在分数。
3. 训练完成,给测试集样本分类,有缺失值怎么办?
这时候,就不能按比例分配了,因为你必须给该样本一个确定的label,而不是薛定谔的label。这时候根据投票来确定,或者填充缺失值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值