核心原理
可以将决策树看成是一个if-then规则的集合,决策树的路径或其对应的if-then规则集合互斥且完备;每一个实例都被一条路径或一条规则覆盖,而且只被一条路径或规则覆盖;
决策树与条件概率分布示意图

决策树学习的目标
根据给定的训练数据集构建一个决策树模型(学习),并使他们能够对实例进行正确的分类(泛 化);
决策树学习的损失函数通常是正则化的极大似然函数。决策树学习的策略是以损失函数为目标函数的最小化;损失函数确定后,学习问题就变成了损失函数意义下选择最优决策树的问题;由于从所有决策树中寻找最优决策树是np完全问题,所以常常使用启发式的算法来近似求解这一最优化问题;以此寻找到次最优的;
决策树学习的核心
- 特征选择——(选取核心数据)
- 决策树生成——(构建决策树)——局部最优
- 决策树剪枝——(提高泛化能力)——全局最优
特征选择
信息增益
**信息增益是衡量特征选择的一个重要指标;**用表示训练数据集对应某个特征所具备的分类能力;
熵
信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为
P(X=xi)=pi,i=1,2,⋯,n
则随机变量的熵定义为
H(X)=−i=1∑npilogpi其中定义:0log0=0
其中对数常取2为底或者e为底,这时熵的单位分别是比特或纳特。从定义可知熵只依赖于X的分布,而与X的取值无关,所以也将X的熵就做H(p);熵越大,随机变量的不确定性就越大,且有定义可知
0≤H(p)≤logn(基本不等式可推导)
p_当随机变量只有两个取值0,1时,熵为
H(p)=−plog2p−(1−p)log2(1−p)
这时熵H(p)随概率p变化的曲线如图所示

条件熵H(Y∣X)表示在随机变量X已知的条件下随机变量Y的不确定性。定义为X给定条件下Y的条件概率分布的熵对X的数学期望
H(Y∣X)=i=1∑npiH(Y∣X=xi),其中pi=P(X=xi),i=1,2,⋯,n
当熵和条件熵中的概率由数据估计得到时,所对应的熵与条件熵分别称为经验上和经验条件熵
信息增益表示得知特征X的信息儿时的类Y的信息不确定性减少的程度
定义:特征A对训练数据集D的信息增益g(D,A),集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D∣A)之差
g(D,A)=H(D)−H(D∣A)
算法
- 计算数据集D的经验熵H(D)
H(D)=−k=1∑k∣D∣∣CK∣log2∣D∣∣CK∣
-
计算特征A对数据集D的经验条件熵
H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)
-
计算信息增益
g(D,A)=H(D)−H(D∣A)
信息增益比
信息增益划分数据及特征存在偏向于选择取值较多的特征的问题。使用信息增益比可以对此作出矫正
信息增益比定义:
gR(D,A)=HA(D)g(D,A)其中,HA(D)=−i=1∑n∣D∣∣Di∣log2∣D∣∣Di∣
决策树生成
ID3算法
- 若D中所有的实例属于同一类,则T为单节点树,并将类Ck作为该节点的类标记,返回T;
- 若A=∅,则T为单节点树,并将D中的实例树最大的类CK作为该节点的类标记,返回T;
- 否则,计算A中各特征对D的信息增益,选择信息增益最大的特征Ag;
- 如果Ag的信息增益小于阀值,则置T为单节点树,并将D中实例数最大的类Ck作为标记,返回T;
- 否则,对于Ag中的每一可能值ai,依Ag=ai,将D分割为若干非空子集Di,将DI中实例数最大的类作为标记,构建子节点,由节点及其子节点构成树T,返回T;
- 对第i个子节点,以Di为训练集,以A−{Ag}为特征集,递归的调用步骤1~5,得到子树Ti,返回Ti;
C4.5的生成算法
与ID3算法相似,C4.5在生成的过程中,用信息增益比来选择特征;
决策树剪枝
原理
递归生成的决策树往往对训练数据分类准确但是对未知数据的分类没有那么准确,会出现过拟合现象,因此需要从已经生成的树上裁掉一些子树或叶节点,从而简化分类树模型;
**决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现;**设树T的叶节点个数为∣T∣,t是树T的叶节点,该叶节点有Nt个样本点,其中k类的样本点有Ntk个,k=1,2,⋯,K,Ht(T)为叶节点上的经验熵,α≥0为参数,则决策树损失函数定义为
Ca(T)=t=1∑∣T∣NtHt(T)+α∣T∣其中经验熵为:Ht(T)=−k∑NtNtklogNtNtk简写为:Cα(T)=C(T)+α∣T∣
C(T)表示模型对讯联数据的预测误差,|T|表示模型复杂程度,α用来控制模型复杂度和准确度之间的影响;
算法
- 计算出每个节点的经验熵;
- 递归的从树的叶节点向上回缩;设一组叶节点回缩到其父节点之前与之后的整体树分别为TB与TA,其对应的损失函数值分别为Ca(TB)与Ca(TA),如果Ca(TA)≤Ca(TB)则进行剪枝,将父节点变为新的叶节点;
- 返回2,知道不能继续为止,得到损失函数最小的子树Tα;
注意,只需要考虑两个数的损失函数的差,其计算可以再局部进行。所以决策树的剪枝算法可以由一种动态规划算法来实现
CART算法
CART生成
回归树
递归的构建二叉树,对回归树用平方误差最小化准则,对分类树使用基尼指数最小化准则,生成二叉树;
定义两个区域:
R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s},
寻找最优切分变量j和最优切分点s,即求解
j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2]
对固定的输入变量j可以找到最优切分点s
c^1=ave(yi∣xi∈R1(j,s)),c^2=ave(yi∣xi∈R2(j,s))
遍历所有输入变量,找到切分点构成一对(j,s).依此将输入空间划分成两个区域,紧接着重复划分,到满足停止条件;这样就得到了一棵回归树,这样的称为最小二乘回归树;
算法
- 选择最优切分变量j与切分点s,求解
j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2]
找到使之最小的一组解(j,s)
- 用选定的对(j,s)划分区域并决定对应的输出值:
c^m=Nm1si∈Rm(j,x)∑yi,x∈Rm,m=1,2
- 继续对两个区域调用步骤1,2,直至满足停止条件
- 将输入控件划分成M个区域,生成决策树;
f(x)=m=1∑Mc^mI(x∈Rm)
分类树
基尼指数定义
分类问题中,假设有k个类,样本点属于第k类的概率为概率为pk,对于给定的样本集合D,其基尼指数为
Gini(p)=1−k=1∑Kpk2
在特征A的条件下,集合D的基尼指数定义为
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经过类A=a分割后集合D的不确定性;基尼指数越大,不确定性就越大

算法
-
设节点的训练数据集为D,计算现有特征对该数据及的基尼指数。对每一个特征A,其可能的每个取值a根据样本点对A=a测试为“是”或”否“将D分割为D1,D2两部分,计算A=a时Gini(D,A);
-
在所有可能的特征A以及它们所有可能的切分点a中选择基尼指数最小的特征及其切分点;并生成两个子节点。将现有的数据集依据特征分配到两个子节点中;
-
对两个子节点递归的调用1,2;
-
生成CART决策树;
CART剪枝
原理
定义子树的损失函数:
Cα(T)=C(T)+α∣T∣
具体的,从整体T0,开始剪枝,对T0的任意内部节点t,以t为单节点树的损失函数为
Cα(t)=C(t)+α
以t为根节点的子树Tt的损失函数为
Cα(Tt)=C(Tt)+α∣Tt∣
通过上面式易得,α=∣Tt∣−1C(t)−C(Tt)为剪枝的零界点,此时虽然二者有相同的损失函数,但t比Tt结点少,因此应该剪枝;
为此对T0中的每一个内部节点t计算
g(t)=∣Tt−1∣C(t)−C(Tt)
表示剪枝后整体损失函数减小的程度.在T0中减去g(t)最小的Tt,将得到的子树作为Tt,将得到的子树作为T1,同时将最小的g(t)设为α1.T1为区间[α1,α2)的最优子树。如此不断剪枝直到根节点;期间不断产生新的α,并产生新的区间;
在得到的子树序列中使用交叉验证发求得最优子树Tα
具体的,利用独立的验证数据集,测试子树序列中的各个子树的平方误差或基尼指数。寻找对应指数最小的子树,同时子树确定也就意味着独影的αk确定;
算法
-
设k=0,T=T0;
-
设α=+∞;
-
自上而下的对各内部节点t计算C(T1),∣Tt∣以及
g(t)=∣Tt∣−1C(t)−C(Tt),α=min(α,g(t))
这里,Tt表示以t为根节点的子树,C(Tt)是对训练数据集的预测误差,∣Tt∣是Tt的叶节点个数;
- 对g(t)=α的内部节点t进行剪枝,并对叶节点t以多数表决的方法确定其类,得到树T;
- 设k=k+1,αk=α,Tk=T;
- 如果Tk不是由根节点及两个叶节点构成的树,则回退到步骤2;否则令Tk=Tn;
- 采用交叉验证法在子树序列T0,T1,⋯,Tn中选取最优子树Tα;