决策树(decision tree)是一种基本的分类与回归方法。其主要优点是模型具有可读性,分类速度快。学习时利用训练数据,根据损失函数最小化的原则建立决策树。预测时,对新的数据利用决策树模型进行分类。
决策树通常包括三个步骤:特征选择、决策树的生成、决策树的修剪 其中决策树的生成只考虑局部最优,决策树的修剪则考虑全局最优。
决策树的思想来源主要来自于三个算法:ID3算法、C4.5算法以及CART算法
决策树定义:
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部节点(internal node)和叶节点(leaf node)。内部节点表示一个特征或属性,叶节点表示一个类。
一、特征选择
通常选择的准则是信息增益(information gain)和信息增益比
1.信息增益:
- 熵(entropy):表示随机变量不确定性的度量
随机变量X的概率分布为:P(X=xi)=pi,i=1,2,……nP(X=x_i) = p_i , i=1,2,……nP(X=xi)=pi,i=1,2,……n
则随机变量X的熵定义为:H(p)=−∑i=1npilogpiH(p) = -\sum_{i=1}^n{p_ilogp_i}H(p)=−∑i=1npilogpi,其中若pi=0则0logpi=0p_i=0则0logp_i=0pi=0则0logpi=0式中对数以2为底或以e为底
熵越大,随机变量的不确定性就越大,从而定义:
0≤H(p)≤logn0 \leq H(p) \leq logn0≤H(p)≤logn - 条件熵H(Y|X)
设有随机变量(X,Y),其联合概率分布为P(X=xi,Y=yi)=pij,i=1,2,3……n;j=1,2,3……mP(X=x_i,Y=y_i)=p_{ij} , i= 1,2,3……n ; j=1,2,3……mP(X=xi,Y=yi)=pij,i=1,2,3……n;j=1,2,3……m
条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性,随机变量X给定的条件下随机变量Y的条件熵(conditional entropy)H(Y|X),定义为X给定的条件下条件概率分布的熵对X的数学期望:H(Y∣X)=∑i=1npiH(Y∣X=xi)H(Y|X) = \sum_{i=1}^n{p_iH(Y|X=x_i)}H(Y∣X)=∑i=1npiH(Y∣X=xi) - 熵与条件熵又被称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)
- 信息增益定义:特征A对训练数据D的信息增益g(D|A),定位为集合D的经验熵H(D)与特征A给定下的经验条件熵H(D|A)之差,即:g(D∣A)=H(D)−H(D∣A)g(D|A) = H(D)-H(D|A)g(D∣A)=H(D)−H(D∣A)
2.信息增益的算法
输入:训练数据D的特征A;
输出:特征A对训练数据集D的信息增益g(D|A),
- (1)计算数据集D的经验熵:H(D)=−∑k=1K∣Ck∣∣D∣log2∣Ck∣∣D∣H(D) = -\sum_{k=1}^{K}{\frac{|C_k|}{|D|}log_2{\frac{|C_k|}{|D|}}}H(D)=−∑k=1K∣D∣∣Ck∣log2∣D∣∣Ck∣,K代表有k个类
- (2)计算特征A对于数据集D的经验条件熵:H(D∣A)=∑i=1n∣Di∣∣D∣H(Di)=−∑i=1n∣Di∣∣D∣∑k=1K∣Cik∣∣Di∣log2∣Cik∣∣Di∣H(D|A)= \sum_{i=1}^n{\frac{|D_i|}{|D|}H(D_i)}=-\sum_{i=1}^n{\frac{|D_i|}{|D|}\sum_{k=1}^{K}{\frac{|C_{ik}|}{|D_i|}log_2{\frac{|C_{ik}|}{|D_i|}}}}H(D∣A)=∑i=1n∣D∣∣Di∣H(Di)=−∑i=1n∣D∣∣Di∣∑k=1K∣Di∣∣Cik∣log2∣Di∣∣Cik∣,n是特征A取值的个数,K代表共有K个类
- (3)计算信息增益:g(D∣A)=H(D)−H(D∣A)g(D|A) = H(D)-H(D|A)g(D∣A)=H(D)−H(D∣A)
3.信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比(information gain ratio)可以对这一问题进行校正。这是特征选择的另一准则。
信息增益比的定义: 特征A对训练数据集D的信息增益比gR(D,A)g_R(D,A)gR(D,A)定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵HA(D)H_A(D)HA(D)之比,即:
gR(D,A)=g(D,A)HA(D)g_R(D,A)=\frac{g(D,A)}{H_A(D)}gR(D,A)=HA(D)g(D,A),
其中 HA(D)=−∑i=nn∣Di∣∣D∣log2∣Di∣∣D∣H_A(D)=-\sum_{i=n}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|}HA(D)=−∑i=nn∣D∣∣Di∣log2∣D∣∣Di∣ ,n是特征A取值的个数
4.ID3算法
输入:训练数据集D,特征集A,阈值ε\varepsilonε;
输出:决策树T。
- (1)若D中所有实例属于同一类CkC_kCk,则树属于单结点树,并将类CkC_kCk作为该结点类标记,返回T;
- (2)若A=∅A=\emptyA=∅,则T为单结点树,并将D中实例数最大的类CkC_kCk作为该结点的类标记,返回T;
- (3)否则计算A中各特征对D的信息增益,选择信息增益最大的特征AgA_gAg;
- (4)如果AgA_gAg的信息增益小于阈值ε\varepsilonε,则置T为单结点树,并将D中实例数最大的类CkC_kCk作为该结点的类标记,返回T;
- (5)否则,对AgA_gAg的每一个可能值aia_iai,依Ag=aiA_g=a_iAg=ai将D分割为若干个非空子集DiD_iDi,将DiD_iDi,中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
- (6)对第i个子结点,以DiD_iDi为训练集,以A-{AiA_iAi}为特征集,递归地调用步(1)~步(5),得到子树TiT_iTi,返回TiT_iTi
5.C4.5的生成算法
C4.5与ID3算法比较类似,只是对ID3算法进行了改进。C4.5在生成过程中,用信息增益比来选择特征。
输入:训练数据集D,特征集A,阈值ε\varepsilonε;
输出:决策树T。
- (1)若D中所有实例属于同一类CkC_kCk,则树属于单结点树,并将类CkC_kCk作为该结点类标记,返回T;
- (2)若A=∅A=\emptyA=∅,则T为单结点树,并将D中实例数最大的类CkC_kCk作为该结点的类标记,返回T;
- (3)否则计算A中各特征对D的信息增益比,选择信息增益比最大的特征AgA_gAg;
- (4)如果AgA_gAg的信息增益比小于阈值ε\varepsilonε,则置T为单结点树,并将D中实例数最大的类CkC_kCk作为该结点的类标记,返回T;
- (5)否则,对AgA_gAg的每一个可能值aia_iai,依Ag=aiA_g=a_iAg=ai将D分割为若干个非空子集DiD_iDi,将DiD_iDi,中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
- (6)对第i个子结点,以DiD_iDi为训练集,以A-{AiA_iAi}为特征集,递归地调用步(1)~步(5),得到子树TiT_iTi,返回TiT_iTi
6.决策树的剪枝
1、什么是剪枝
在决策树学习过程将生成的数进行简化的过程。裁掉一些子树或叶节点,并将其父节点作为新的叶节点从而简化分类树模型。
2、为什么要剪枝
因为在决策树生成算法中递归的生成决策树,直到不能继续下去为止。这样生成的决策树过于复杂。容易产生过拟合,对训练数据的分类很准确,但对未知的测试数据分类却没有那么准确。通过剪枝来减少树的负责度从而提高决策树的泛化能力。
3、决策树通过什么样的规则作为剪枝的判断条件
决策树剪枝往往通过极小化决策树整体的损失函数(loss function)或代价函数(cost function)来实现。
- |T|树的叶节点个数
- t是树T的叶节点,该叶节点有NtN_tNt个样本点
- t结点中k类的样本点的个数有NtkN_{tk}Ntk个,k=1,2,……,K
- Ht(T)H_t(T)Ht(T)为叶节点t上的经验熵
- α≥0\alpha\geq0α≥0为参数
决策数的损失函数可以定义为:
Cα(T)=∑t=1∣T∣NtHt(T)+α∣T∣C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|Cα(T)=∑t=1∣T∣NtHt(T)+α∣T∣
其中经验熵为:
Ht(T)=−∑k=1KNtkNtlog2NtkNtH_t(T)=-\sum_{k=1}^{K}\frac{N_{tk}}{N_t}log_2\frac{N_{tk}}{N_t}Ht(T)=−∑k=1KNtNtklog2NtNtk
在损失函数中将第一项定义为:
C(T)=∑t=1∣T∣NtHt(T)=−∑t=1∣T∣∑k=1KNtklogNtkNtC(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^{K}N_{tk}log\frac{N_{tk}}{N_t}C(T)=∑t=1∣T∣NtHt(T)=−∑t=1∣T∣∑k=1KNtklogNtNtk
这时有:
Cα(T)=C(T)+α∣T∣C_\alpha(T)=C(T)+\alpha|T|Cα(T)=C(T)+α∣T∣
其中C(T)C(T)C(T)表示对训练数据的预测误差,|T|表示模型的复杂度。参数α≥0\alpha\geq0α≥0控制两者之间的影响。
较大的α\alphaα促使模型选择较简单的模型。反之促使选择较复杂的模型。
决策树生成的时候只考虑信息增益和信息增益比这是考虑局部的模型最优,而剪枝的过程中考虑的是整体的模型最优
树的剪枝算法:
输入:生成算法产生的整个树T,参数α\alphaα
输出:修剪后的子树TαT_\alphaTα
- (1)计算每个结点的经验熵
- (2)递归地从树的叶节点向上回缩
设一组叶节点会所到其父节点之前与之后的整体树分别为TB与TAT_B与T_ATB与TA,其对应的损失函数值分别为Cα(TB)与Cα(TA)C_\alpha(T_B)与C_\alpha(T_A)Cα(TB)与Cα(TA),如果:
Cα(TB)≤Cα(TA)C_\alpha(T_B)\leq C_\alpha(T_A)Cα(TB)≤Cα(TA)
则进行剪枝,即将父节点重新变为叶节点
- (3)返回(2),直至不能继续为止,得到损失函数最小的子树∣Tα∣|T_\alpha|∣Tα∣
(剪枝时的损失函数只在局部进行,所以决策树的剪枝算法可以用一种动态规划的算法实现。)
CART算法
基尼指数:
- 分类问题中,假设有K个类,样本点属于第K个类的概率为pkp_kpk,则概率分布的基尼指数定义为:
Gini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2Gini(p)=\sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^K{p_k^2}Gini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2 - 对于二分类问题,样本点属于第一类的概率为p,则概率分布的基尼指数为:
Gini(p)=2p(1−p)Gini(p)=2p(1-p)Gini(p)=2p(1−p) - 对于给定的样本集合D,其基尼指数为
Gini(D)=1−∑k=1K(∣Ck∣∣D∣)2Gini(D)=1-\sum_{k=1}^K(\frac{|C_k|}{|D|})^2Gini(D)=1−∑k=1K(∣D∣∣Ck∣)2 - 如果样本数据集D对于特征A是否取某一可能值a分成D1和D2D_1和D_2D1和D2两部分,则在特征A的条件下,集合D的基尼指数为:
Gini(D,A)=∣D1∣∣D∣Gini(D1)+∣D2∣∣D∣Gini(D2)Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2) - 基尼指数Gini(D)Gini(D)Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)Gini(D,A)Gini(D,A)表示经A=a分割后集合D的不确定性。
CART生成算法:
输入:训练数据集D,停止计算的条件
输出:CART决策树
根据训练数据集,从根节点开始,递归地对每个结点进行以下操作,构建二叉决策树:
- 结点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时对每一个特征A,对其可能取的每个值啊,根据样本点对A=a的测试为“是”或“否”来对D分成D1和D2D_1和D_2D1和D2两部分,然后计算以A=a分开后的基尼指数。
- 在所有可能的特征A以及他们所有的可能取a中找到基尼指数最小的可能特征以及对应对应的切分点作为最优特征与最优切分点。依据最优特征以及最优切分点将结点中的训练数据分配到两个子结点中。
- 对每个子结点递归的调用(1)、(2)。直至满足停止条件。
- 生成CART树
算法停止计算的条件是结点中的样本点小于预定的阈值,或样本集中的基尼指数小于预定的阈值,或者没有更多的特征
CART剪枝
???