决策树剪枝

决策树是一种基本的分类与回归方法。分类决策树是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成。结点由两种类型,内部结点表示一个特征或属性,叶结点表示一个类。

1. 基础知识

在信息学和概率统计中,熵(entropy)是表示随机变量不确定性的度量。设XX是一个取有限个值得离散随机变量,其概率分布为:

P(X=xi)=pi,i=1,2,3,...,nP(X=xi)=pi,i=1,2,3,...,n

则随机变量XX的熵定义为:
H(X)=i=1npilogpiH(X)=−∑i=1npilog⁡pi

通常上式中对数以22,或者ee为底。由定义知,熵依赖于XX的分布,而于XX的取值无关,所以XX的熵记作H(p)H(p),即:
H(p)=i=1npilogpiH(p)=−∑i=1npilog⁡pi

熵越大,随机变量的不确定性就越大,0H(p)logn0≤H(p)≤log⁡n

1.1 条件熵

设有随机变量(X,Y)(X,Y),其联合概率分布为:

P(X=xi,Y=yj)=pij,i=1,2,...,n;j=1,2,...,nP(X=xi,Y=yj)=pij,i=1,2,...,n;j=1,2,...,n

条件熵表示H(Y|X)H(Y|X)在已知随机变量XX的条件下随机变量YY的不确定性,定义为:
H(Y|X)=i=1npiH(Y|X=xi)H(Y|X)=∑i=1npiH(Y|X=xi)

这里,pi=P(X=xi),i=1,2,...,npi=P(X=xi),i=1,2,...,n。当熵和条件熵中的概率由数据估计(极大似然估计)得到时,所对应的熵分别为经验熵和经验条件熵。

1.2 信息增益

信息增益表示得知特征AA的信息而使得类YY的信息的不确定性减少的程度。特征AA对训练数据集DD的信息增益g(D,A)g(D,A),定义为集合DD的经验熵与特征AA给定条件下DD的经验条件熵之差,即:

g(D,A)=H(D)H(D|A)g(D,A)=H(D)−H(D|A)
对于数据集DD,信息增益依赖于特征,不同的特征往往具有不同的信息增益,信息增益大的特征往往具有更强的分类能力。

根据信息增益准则的特征选择方法:对训练数据集(或子集)DD,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
设训练数据集为DD|D||D|表示其样本容量,即样本个数。设有K个类Ckk=1,2,...,KCk,k=1,2,...,K|Ck||Ck|为属于类CkCk的样本个数,Kk=1|Ck|=|D|∑k=1K|Ck|=|D|。设特征AAnn个不同的取值a1,a2,...,ana1,a2,...,an,根据特征AA的取值将DD划分为nn个子集D1D2,...,DnD1,D2,...,Dn|Di||Di|DiDi的样本个数,ni=1|Di|=|D|∑i=1n|Di|=|D|。记子集DiDi中属于类CkCk的样本集合为DikDik,即Dik=DiCkDik=Di∩Ck

(1)数据集DD的经验熵H(D)H(D)

H(D)=k=1K|Ck||D|log|Ck||D|H(D)=−∑k=1K|Ck||D|log⁡|Ck||D|

(2)特征AA对数据集DD的经验条件熵H(D|A)H(D|A)
H(D|A)=i=1n|Di||D|H(Di)=i=1n|Di||D|k=1K|Dik||Di|log2|Dik||Di|H(D|A)=∑i=1n|Di||D|H(Di)=−∑i=1n|Di||D|∑k=1K|Dik||Di|log2⁡|Dik||Di|

(3)信息增益g(D,A)=H(D)H(D|A)g(D,A)=H(D)−H(D|A)

1.3 信息增益比

信息增益作为划分数据集的特征,存在偏向与选择取值较多的特征的问题。信息增益比可以改进改问题。特征AA对训练数据集DD的信息增益比gR(D,A)gR(D,A)定义为其信息增益g(D,A)g(D,A)与训练数据集DD关于特征AA的值得熵HA(D)HA(D)之比,即:

gR(D,A)=g(D,A)HA(D)gR(D,A)=g(D,A)HA(D)
其中HA(D)=ni=1|Di||D|log2|Di||D|HA(D)=−∑i=1n|Di||D|log2⁡|Di||D|nn是特征A取值的个数。

1.4 基尼系数

后面补充

2. ID3算法

在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。
给定训练数据集DD特征集SS,阈值ϵϵ
(1)若DD中所有实例属于同一类CkCk,则T为单结点树,并将类CkCk作为该结点的类标记,返回T;
(2)若S=S=∅,则T为单结点树,并将D中实例数最大的类CkCk作为该结点的类标记,返回T;
(3)否则,计算SS中各特征对DD的信息增益,选择信息增益最大的特征SgSg
(4)如果SgSg的信息增益小于阈值ϵϵ,则置T为单结点树,并将DD中实例数最大的类CkCk作为该结点的类标记,返回T;
(5)否则,对SgSg的每一个可能值aiai,将DD分割为若干个非空子集DiDi,将DiDi中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T
(6)对第i个子节点,以DiDi为训练集,以SSgS−Sg为特征集,递归调用步(1)-(5),得到字数TiTi,返回TiTi

3. C4.5算法

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

4. CART算法

后面再添加

5. 决策树的评价

假定样本的总类别为K个,对于决策树的某叶结点,假定该叶结点含有样本数目为nn,其中第kk类的样本数目为nkk=1,2,...,Knk,k=1,2,...,K
(1)若该结点中某类样本nj=nnj=n,而n1,...nj1,nj+1,...nK=0n1,...nj−1,nj+1,...nK=0,则该结点的熵Hp=0Hp=0,最小;
(2)若该结点中各类样本数目n1=n2=...=nk=n/Kn1=n2=...=nk=n/K,则该结点熵Hu=lnKHu=ln⁡K,最大。
对所有叶结点的熵求和,该值越小说明对样本的分类越精确。各个叶结点包含的样本数目不同,可以使用样本数加权求熵和。因此,评价函数:

C(T)=tleafNtH(t)C(T)=∑t∈leafNt⋅H(t)

该评价函数值越小越好,所以,可以称为“损失函数”。

6. 剪枝

决策树对训练属于有很好的分类能力,但是对于未知的测试集未必有好的分类能力,泛化能力弱,即可能发生过拟合现象。为防止过拟合,我们需要进行剪枝。
三种决策树的剪枝过程算法相同,区别是对于当前树的评价标准不同。

剪枝分为预剪枝和后剪枝:

6.1 预剪枝:

(1)每一个结点所包含的最小样本数目,例如10,则该结点总样本数小于10时,则不再分;
(2)指定树的高度或者深度,例如树的最大深度为4;
(3)指定结点的熵小于某个值,不再划分。

6.2 后剪枝:

总体思路:由完全树T0T0开始,剪枝部分结点得到T1T1,再次剪枝部分结点得到T2T2...直到剩下树根的树TkTk;在验证数据集上对这kk个树分别评价,选择损失函数最小的树TaTa

设树TT的叶结点个数为|T||T|,t是树T的叶结点,该叶结点有NiNi个样本点,其中k类的样本点有Nikk=1,2,...,KNik个,k=1,2,...,K。 Ht(T)Ht(T)为叶结点tt上的经验熵,α0α≥0为参数,则决策树学习的损失函数可定义为:

Cα(T)=t=1|T|NtH(T)+α|T|Cα(T)=∑t=1|T|Nt⋅H(T)+α|T|

其中经验熵为
Ht(T)=t=1|T|NtkNtlog2NtkNtHt(T)=∑t=1|T|NtkNtlog2⁡NtkNt

这时有:

Cα(T)=C(T)+α|T|Cα(T)=C(T)+α|T|

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

假定当前对以rr为根的子树剪枝,剪枝后,只保留rr本身而删掉所有的子结点。
rr为根的子树:

  • 剪枝后的损失函数:Cα(r)=C(r)+αCα(r)=C(r)+α
  • 剪枝前的损失函数:Cα(R)=C(R)+α|Rleaf|Cα(R)=C(R)+α⋅|Rleaf|C(R)C(R)应该是小于C(r)C(r)
  • 令二者相等,求得:α=C(r)C(R)Rleaf1α=C(r)−C(R)Rleaf−1αα称为结点rr的剪枝系数。

对于给定的决策树T0T0

  • 计算所有内部结点的剪枝系数
  • 查找最小剪枝系数的结点,剪枝得决策树TkTk
  • 重复以上步骤,直到决策树TkTk只有一个结点;
  • 得到决策树序列T0,T1,T2...TkT0,T1,T2...Tk;
  • 使用验证样本集选择最优子树。

https://www.cnblogs.com/csyuan/p/6535366.html
阅读更多
个人分类: 机器学习
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭