Decision Tree

决策树模型
  • 决策树是一种基本的分类与回归的方法
  • 决策树由节点和有向边组成
  • 节点分为内部节点和叶节点
  • 决策树的学习其实就是特征选择的过程
决策树学习

决策树学习算法包含特征选择、决策树的生成和决策树的剪枝过程

给定数据集D={(x1,y1),,(xm,ym)}其中m为样本容量,xi=(xi(1),,xi(n))n为特征个数;yi{1,2,,K}为类标记。

信息增益

统计学中,熵是随机变量不确定性的度量,即混乱程度。假设X是一个取有限个值的离散随机变量,其概率分布为P(X=xi)=pi,i=1,..,N,那么X的熵定义为H(X)=i=1npilogpi条件熵H(Y|X)可以表示为已知随机变量X的条件下,随机变量Y的不确定性,也可以表示成H(Y|X)=i=1NpiH(Y|X=xi)其中pi=P(X=xi)当熵和条件熵中的概率由数据估计得到时,则分别称之为经验熵和条件经验熵,如果出现0概率,则令0log0=0

信息增益表示在得知特征X的情况下而使得Y的不确定性减少的程度,形式化表述为:特征A对训练数据集D的信息增益g(D,A),定义为g(D,A)=H(D)H(D|A)这里的信息增益等价于训练数据集中类与特征的互信息。计算信息增益的算法如下:


输入:数据集D和特征A


1 计算数据集D的经验熵H(D)=k=1K|Ck||D|log2|Ck||D|
2 计算特征A对数据集D的经验条件熵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).


输出信息增益


信息增益比

以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比可以缓解这个问题。特征A对训练数据集D的信息增益比定义为其增益信息g(D,A)与训练数据集D关于特征A的值的熵HA(D)之比,即

gR(D,A)=g(D,A)HA(D)

其中,HA(D)=i=1An|Di||D|log2|Di||D|An是特征A取值的个数。

ID3

ID3算法采用自上而下递归式的算法构建决策树,它使用信息增益作为特征选择的标准。停止条件是节点所有特征的信息增益都很小(阈值ϵ)或没有特征可以选择为止。


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


1 若D中所有实例属于同一类CkT为单节点树,Ck为该节点的类标记,返回T
2 若A=T为单节点树,将D中实例数最大的类Ck作为该节点的类标记,返回T
3 否则,分别计算A中各特征对D的信息增益,选择信息增益最大的特征Ag
4 如果Ag<ϵ,则置T为单节点树,将D中实例数最大的类Ck作为该节点的类标记,返回T
5 否则,对Ag的每一个可能值ai,根据Ag=aiD分割成若干非空子集Di,将Di中实例数最大的类作为标记,构建子节点,由节点及其子节点构成树T,返回T
6 对每个子节点i,以Di为训练集,以AAg为特征集,递归调用以上步骤


输出:决策树T


C4.5

C4.5与ID3的差异在于C4.5使用信息增益比进行选择选择

基尼指数

基尼指数表示不确定程度,基尼指数越大,样本集的不确定程度就越大、纯度越低。

分类问题中,假设有K个类,样本点属于第k类的概率为pk,则概率分布的基尼指数定义为Gini(p)=1k=1Kpk2对于给定的样本集D,其基尼指数为Gini(D)=1k=1K(|Ck||D|)2其中Ck表示第k类的样本子集。表示集合D的不确定性。

假设样本集D根据特征A的不同取值被分成An个部分,则定义在特征A下集合D的基尼指数为

Gini(D,A)=i=1An|Di||D|Gini(Di)
CART

CART分类树
使用基尼指数作为划分属性的标准,每次选择基尼指数最小的属性。

CART回归模型
假设已将输入空间划分为M个单元R1,,RM,并且在每个单元Rm上有一个固定的输出值cm,回归树模型可以表示为f(x)=m=1McmI(xRm)当输入空间划分确定时,可以用平方误差xi(yif(xi))2表示训练误差, cm输出值为对应Rm上所有样本输出值的均值

使用启发式的方法划分输入空间,遍历输入变量和可能的切分变量找到最优的切分变量j和切分点s,即找到切分后部分的误差最小:

R1(j,s)={x|x(j)s}R2(j,s)={x|x(j)>s}minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]

其中c1,c2是划分后部分中输出值的均值。最小二乘回归树算法描述如下:


输入:训练集D


  1. 选择最优切分变量j与最优切分点s,求解minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]
  2. 用选定的对(j,s)划分区域并决定相应输出值:R1,R2,c1,c2
  3. 继续对两个子区域调用步骤1、2直至满足停止条件
  4. 将输入空间划分为M个区域R1,,RM,生成CART树f(x)=m=1McmI(xRm)

输出:f(x)


决策树的剪枝

以上方法可能会产生过拟合现象,适当剪枝会使得决策树的泛化效果变得更好
剪枝分为预剪枝和后剪枝两种,预剪枝指的是在决策树生成的过程中进行剪枝,后剪枝则是在生成决策树之后再进行剪枝。

预剪枝

大致过程描述:对于一个节点,考虑其剪枝或者不剪枝的情况,看这两种情况下哪种正确率高(一个节点的类别由其包含同类样本数最多的决定),由此决定是否剪枝。

预剪枝基于贪心本质禁止某些节点展开,而这些节点第一次展开效果可能不好,但后续表现可能显著提高,所以会带来欠拟合的风险

后剪枝

大致过程描述:自下而上,叶节点不考虑,考虑其父节点F是否需要剪枝,可以仅仅通过父节点包含的样本,在剪枝和不剪枝的情况下分别计算准确率,然后确定是否需要剪枝。

下面是令一种后剪枝的方法(我不是很了解):
通过极小化决策树整体的损失函数来实现。设树的叶节点个数为|T|t是树T的叶节点,此叶节点上有Nt个样本,属于类Ck的样本有Ntk个,Ht(T)为叶节点t上的经验熵,α0为参数,则决策树学习的损失函数可以定义为

Cα(T)=t=1|T|NtHt(T)+α|T|=C(T)+α|T|

其中经验熵为Ht(T)=kNtkNtlog2NtkNtC(T)表示模型对训练数据的预测误差,|T|表示模型的复杂度。剪枝算法描述如下:


输入:决策树T,参数α


1 计算每个节点的经验熵
2 递归地从树的节点向上回溯,如果保留子节点的损失函数更大,剪枝以父节点作为叶子
3 返回2直到不能继续为止


输出:修建后的决策树Tα


分享到