决策树——ID3\C4.5\CART算法原理及区别

决策树(decision tree)是一种基本的分类与回归方法。笔者在学习了《统计学习方法》之后,从决策树实现分类和回归所需的原理出发,进行总结。下面将介绍ID3算法、C4.5、CART算法的计算过程及区别。决策树理论知识的学习和掌握,是对以决策树为基础模型的集成方法Random Forest、GBDT、XGBoost、lightgbm及Catboost的基础必备。因此,笔者在复习决策树章节过程中,将知识点重新梳理一遍,以便更好理解。也为加深对决策树的理解,将具体的代码走了一遍,加深理解和提高编码实现能力。

下面将从知识点介绍、算法流程介绍两部分进行介绍。

1、知识点

决策树模型:分类决策树模型是一种描述对实例进行分类的树形结构,决策树由节点(node)和有向边(directed edge)组成。节点有两种类型:内部节点(internal node)和叶节点(leaf node)。内部节点表示一个特征或属性,叶节点表示一个类。

决策树学习:假设给定训练数据集

                                                           D=\begin{Bmatrix} (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N}) \end{Bmatrix}

其中,x_{i}=(x^{(1)}_{i},x^{(2)}_{i},...,x^{(N)}_{i})^{T}为输入实例(即第i个样本),N为特征个数(即一个实例有N个特征),y_{i}\in \begin{Bmatrix} 1,2,...,K \end{Bmatrix}为类标记,i=1,2,...,N,N为样本容量。学习的目标是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。

熵(entropy):度量随机变量的不确定性。设X是一个取有限个值得离散随机变量,其概率分布为:

                                                     P(X=x_{i})=p_{i},i=1,2,...,n

则随机变量X的熵定义为

                                                          H(X)=-\sum^{n}_{i=1}p_{i}log_{p_{i}}(1)

上述式子中对数通常以2或e为底,这时熵的单位分别称做比特(bit)或纳特(nat)。由定义可知,熵只依赖于X的分布,与X具体取值无关,故也将X的熵记作H(p)

条件熵(conditional entropy):在条件A下,随机变量B的不确定性度量。设随机变量(X,Y),其联合概率分布为:

                                          P(X=x_{i},Y=y_{j})=p_{ij},i=1,2...,n;j=1,2,...,m

                   条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。其定义为X给定条件下Y的条件概率分布的熵对 X的数学期望:

                                                                   H(Y|X)=\sum^{n}_{i=1}p_{i}H(Y|X=x_{i})

这里,p_{i}=P(X=x_{i}),i=1,2,...,n.

信息增益(information gain):表示在确定X信息使得Y得信息不确定性较少的程度。特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验熵H(D|A)之差,即:

                                                           g(D,A)=H(D)-H(D|A)

 一般情况下,熵H(D)与条件熵H(D|A)之差,称之为互信息(mutual information)

信息增益的算法计算如下:

输入:训练数据集D和特征A;

输出:特征A对训练数据集D的信息增益g(D,A).

(1) 计算数据集D的经验熵H(D):

                                                          H(D)=-\sum^{K}_{k=1}\frac{|C_{k}|}{|D|}log_{2}\frac{|C_{k}|}{|D|}

(2) 计算特征A对数据集D的经验条件熵H(D|A):

                                               H(D|A)=\sum^{n}_{i=1}\frac{|D_{i}|}{|D|}H(D_{i})=\sum^{n}_{i=1}\frac{|D_{i}|}{|D|}\sum^{K}_{k=1}\frac{|D_{ik}|}{|D_{i}|}log_{2}\frac{|D_{ik}|}{|D_{i}|}

(3) 计算信息增益

                                                          g(D,A)=H(D)-H(D|A)

其中,C_{k},k=1,2,...,K表示数据集D第K类子集,|C_{k}|表示属于类C_{k}的样本数量。特征A有多个取值,根据取值将D划分为n个子集D_{1},D_{2},...,D_{n},|D_{i}|表示样本集D_{i}的个数。D_{ik}表示子集D_{i}中属于C_{k}的样本集合D_{ik},|D_{ik}|表示样本D_{ik}的样本个数。

信息增益比(information gain ratio):特征A对数据集D的信息增益比g_{R}(D,A)定义为其信息增益g(D,A)与训练数据集D关于特征A的值熵H_{A}(D)之比,即:

                                                                              g_{R}(D,A)=\frac{g(D,A)}{H_{A}(D)}

基尼指数(Gini index):分类问题中,假设有K个类,样本点属于第k类的概率为p_{k},则概率分布的基尼指数定义为:

                                                                Gini(p)=\sum^{K}_{k=1}p_{k}(1-p_{k})=1-\sum^{K}_{k=1}p^{2}_{k}

对于二分类问题,若样本点属于第1类的概率为p,则概率分布的基尼指数为:

                                                                        Gini(p)=2p(1-p)

对于给定的样本集合,其基尼指数为

                                                                 Gini(D)=1-\sum^{K}_{k=1}\left ( \frac{|C_{k}|}{|D|} \right )^{2}

其中,C_{k},k=1,2,...,K表示数据集D第k类子集。

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

                                                                       C_{\alpha }(T)=\sum^{|T|}_{t=1}N_{t}H_{t}(T)+\alpha |T|

其中经验熵为:

                                                                        H_{t}(T)=-\sum_{k}\frac{N_{tk}}{N_{t}}log\frac{N_{tk}}{N_{t}}

树的剪枝算法:

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

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

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

(2)递归地从树的叶结点向上回缩。设一组叶结点回缩到其父节点之前与之后的整体树分别为T_{B}T_{A},与对应的损失函数值分别是C_{\alpha}(T_{A})C_{\alpha}(T_{B}),如果

                                                                            C_{\alpha}(T_{A})\leq C_{\alpha}(T_{B})

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

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

2、ID3、C4.5、CART算法流程

2.1  ID3算法

ID3算法在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根节点(root node)开始,对结点计算所有可能的特征的信息增益,选择特征增益最大的特征作为结点的特征,由该特征不同的取值建立子结点;再递归调用以上方法,构建决策树;直到所有特征的信息增益很小或没有特征可以选择为止。最后得到一个决策树。

ID3算法

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

输出:决策树T

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

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

(3)(1)(2)不成立,按信息增益的计算方式计算A中各特征对D的信息增益,选择信息增益最大的特征A_{g}

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

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

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

2.2  C4.5 算法

C4.5在决策树各个结点上应用信息增益比准则选择特征。其他思路同ID3。

算法如下:

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

输出:决策树T

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

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

(3)(1)(2)不成立,按信息增益比的计算方式计算A中各特征对D的信息增益比,选择信息增益最大的特征A_{g}

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

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

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

2.3  CART算法

分类与回归树(classification and regression tree,CART):同样由特征选择、树的生成与剪枝组成。既可以用于回归又可以用于分类。CART是再给定随机变量X条件下输出随机变量Y的条件概率分布的学习方法。

CART算法

(1)决策树生成:基于训练数据集生成决策树,生成的决策树尽量大;

(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

回归树采用平方误差最小化准则,分类树采用基尼指数最小化准则,进行特征选择,生成二叉树。

最小二乘回归树生成算法

输入:训练数据集D。

输出:回归树f(x)

在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树。

(1)选择最优切分变量j与切分点s,求解:

                               min_{j,s}\begin{bmatrix} min_{c_{1}} \sum_{x_{i}\in R_{1}(j,s)}(y_{i}-c_{1})^2+min_{c_{1}} \sum_{x_{i}\in R_{2}(j,s)}(y_{i}-c_{2})^2 \end{bmatrix}

遍历变量j,对固定的切分变量j扫描切分点s,选择上式达到最小值的对(j,s)。

(2)用选定的对(j,s)划分区域并决定相应的输出值:

                                               \begin{matrix} R_{1}(j,s)={x|x^{(j)}\leq s},R_{2}(j,s)={x|x^{(j)}> s} \\ \hat{c}_{m}=\frac{1}{N_{m}}\sum_{x_{i}\in R_{m}(j,s)}y_{i}, x\in R_{m},m=1,2 \end{matrix}

(3)继续对两个子区域调用步骤(1),(2),直至满足停止条件。

(4)将输入空间划分为M个区域R_{1},R_{2},...,R_{M},生成决策树:

                                             f(x)=\sum^{M}_{m=1}\tilde{c}_{m}I(x\in R_{m})

分类树生成:决策树各个结点上应用基尼指数选择特征,其他同ID3和C4.5计算。

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

输出:决策树T

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

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

(3)(1)(2)不成立,按基尼指数的计算方式计算A中各特征对D的基尼指数,选择信息增益最大的特征A_{g}

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

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

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

CART剪枝算法

输入:CART生成决策树T_{0}

输出:最优决策树T_{\alpha}

(1)设k=0,T=T_{0}

(2)设\alpha=+\infty

(3)自下而上地对各内部结点t计算C(T_{t}),|T_{t}|以及

                                                                      g(t)=\frac{C(t)-C(T_{t})}{|T_{t}-1|}

                                                                      \alpha=min(\alpha,g(t))

这里,T_{t}表示以t为根结点的子树,C(T_{t})是对训练数据的预测误差,|T_{t}|T_{t}的叶结点个数,g(t)表示剪枝后整体损失函数减少的程度。

(4)对g(t)=\alpha的内部结点t进行剪枝,并对叶结点t以多数表决法决定其类,得到树T。

(5)设k=k+1,\alpha_{k}=\alpha,T_{k}=T

(6)如果T_{k}不是由根结点及两个叶结点构成的树,则回到步骤(3);否则令T_{k}=T_{n}

(7)选择交叉验证法在子树序列T_{0},T_{1},...,T_{n}中选择最优T_{\alpha}

 

参考资料:《统计学习方法》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值