《统计学习方法》--决策树

《统计学习方法》第五章–决策树

决策树概述

决策树模型呈树形结构,在分类过程中表示基于特征对实例进行分类的过程。决策树模型可以视为if-then规则的集合,也可以视为是定义在特征空间与类别空间上的条件改了分布。主要优点是模型具有很好的可解释性,分类速度快,缺点是构建决策树时用的特征序列对分类效果有较大的影响。决策树学习过程通常包括三个步骤:特征选择决策树的生成决策树的修剪

决策树模型

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

决策树学习的本质是从给定的训练数据集中依据属性或特征归纳出一组分类规则。与给定的训练数据集相符合的分类规则可能有多个,决策树模型就是需要从多个符合的分类规则中找到损失最小的,泛化能力最好的一组分类规则。决策树常用的损失函数是正则化的极大似然函数,决策树的学习策略是以损失函数为目标函数的最小化。由于所有可能的决策树组成的解空间较大,从中找到最优的决策树是NP完全问题,因此一般多采用启发式算法来近似求解。

决策树学习的算法通常是一个递归的选择最优特征的过程。从可选的特征集合中选出最优的特征(即依据该特征能最有效的将训练数据集分类),按照这一特征将数据集分割成子集,该特征作为这些子集的根节点。如果这些子集已经基本可以正确分类,那么构建叶节点,并将这些子集分到所对应的的叶节点中去。如果还有子集不能被正确分类,那么对这些子集选取新的最优特征,继续对其进行分割,直至所有训练数据都被正确分类。至此就构建出来一颗决策树。

通过上述步骤构建的决策树可以对训练数据集进行很好的分类,但是并不一定有很好的泛化能力,即可能发生过拟合现象。为了增强其泛化能力,我们需要对构建好的决策树进行自底向上的剪枝,即将树变得更简单一点。通过去掉决策树中过于细分的叶节点,使其回退到父节点甚至更高节点,用父节点或更高节点作为新的叶节点。

特征选择

特征选择在于选取对训练数据具有良好分类能力的特征,这样可以提高决策树的学习效率。通常特征选择的准则是信息增益或信息增益比。

在信息论和概率统计中,熵是表示随机变量不确定性的度量。设 X X X是一个取有限个值得离散随机变量,其概率分布为: P ( X = x i ) = p i , i = 1 , 2 , 3... , n P(X=x_i)=p_i, i=1,2,3...,n P(X=xi)=pi,i=1,2,3...,n,则随机变量 X X X的熵定义为: H ( X ) = − ∑ i = 1 n p i log ⁡ p i H(X)=-\sum_{i=1}^np_i\log p_i H(X)=i=1npilogpi或(从定义可知和X的取值无关,只和其分布有关) H ( p ) = − ∑ i = 1 n p i log ⁡ p i H(p)=-\sum_{i=1}^np_i\log p_i H(p)=i=1npilogpi熵有两种单位:(1)当公式中的对数以2为底时,单位为比特(bit);(2)当公式中的对数以e为底时,单位为纳特(nat)。熵越大,随机变量的不确定性就越大。

条件熵

设有随机变量 ( X , Y ) (X,Y) (X,Y)其联合概率分布为: P ( X = x i , Y = y j ) = p i j , i = 1 , 2 , . . . n , j = 1 , 2 , . . . m P(X=x_i,Y=y_j)=p_{ij},i=1,2,...n,j=1,2,...m P(X=xi,Y=yj)=pij,i=1,2,...n,j=1,2,...m条件熵 H ( Y ∣ X ) H(Y|X) H(YX)表示在已知随机变量 X X X的条件下随机变量 Y Y Y的不确定性,定义为 X X X给定条件下 Y Y Y的条件概率分布的熵对 X X X的数学期望: H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X)=\sum_{i=1}^np_iH(Y|X=x_i) H(YX)=i=1npiH(YX=xi) p i = P ( X = x i ) , i = 1 , 2 , . . . , n p_i=P(X=x_i),i=1,2,...,n pi=P(X=xi),i=1,2,...,n

经验熵和经验条件熵

当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,对应的熵与条件熵分别称为经验熵经验条件熵若有概率为0的,则令 0 log ⁡ 0 = 0 0\log0=0 0log0=0

信息增益(互信息)

信息增益(也称为互信息)表示得知特征 X X X的信息后特征 Y Y Y的信息不确定性减少的程度,反应了特征 X X X对于其他特征不确定性的影响程度。

特征 A A A对训练数据集 D D D的信息增益 g ( D , A ) g(D,A) g(D,A)定义为集合 D D D的经验熵 H ( D ) H(D) H(D)与特征 A A A在给定条件下 D D D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA)之差,即 g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)

信息增益大的特征具有更强的分类能力(即表示在已知该特征的情况下,整个集合的不确定降低最多)

信息增益比

以信息增益作为选择特征的准则,存在偏向于选择取值较多的特征的问题。即当一个特征可能的取值较多时,其计算出来的信息增益可能会较高,但是并不一定就一定是一个更有效的分类特征。采用信息增益比可以对这一问题进行校正,这是特征选择的另一准则。

特征 A A A对训练数据集 D D D的信息增益比 g R ( D , A ) gR(D,A) gR(D,A)定义为其信息增益 g ( D , A ) g(D,A) g(D,A)与训练数据集 D D D关于特征 A A A的值的熵 H A ( D ) H_A(D) HA(D)之比,即: g R ( D , A ) = g ( D , A ) H A ( D ) gR(D,A)=\frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A),其中, H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ log ⁡ 2 ∣ D i ∣ ∣ D ∣ , n H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\log_2\frac{|D_i|}{|D|},n HA(D)=i=1nDDilog2DDi,n是特征 A A A取值的个数

决策树生成

ID3算法(基于信息增益)

ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归的构建决策树。

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

输出:决策树 T T T

(1)若 D D D中实例属于同一类 C k C_k Ck,则 T T T为单节点树。并将类 C k C_k Ck作为该节点的类标记,返回 T T T
(2)若 A = ϕ A=\phi A=ϕ,则 T T T为单节点树,并将 D D D中实例数最大的类 C k C_k Ck作为该节点的类标记,返回 T T T
(3)否则,按照求解信息增益的算法,计算 A A A中各特征对 D D D的信息增益,选择信息增益最大的特征 A g A_g Ag
(4)如果 A g A_g Ag信息增益小于阈值 ϵ \epsilon ϵ,则置 T T T为单节点树,并将 D D D中实例数最大的类 C k C_k Ck作为该节点的类标记,返回 T T T
(5)否则,对 A g A_g Ag的每一可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai D D D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子节点,由节点及其子节点构成树 T T T,返回 T T T
(6)对第 i i i个子节点,以 D i D_i Di为训练集,以 A − { A g } A-\{A_g\} A{Ag}为特征集,递归调用步骤(1)~(5),得到子树 T i T_i Ti,返回 T i T_i Ti

C4.5算法(基于信息增益比)

C4.5算法本质上和ID3算法是一样的,只是采用信息增益比作为特征选择的评价准则。

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

输出:决策树 T T T

(1)若 D D D中实例属于同一类 C k C_k Ck,则 T T T为单节点树。并将类 C k C_k Ck作为该节点的类标记,返回 T T T
(2)若 A = ϕ A=\phi A=ϕ,则 T T T为单节点树,并将 D D D中实例数最大的类 C k C_k Ck作为该节点的类标记,返回 T T T
(3)否则,按照求解信息增益比的算法,计算 A A A中各特征对 D D D的信息增益,选择信息增益比最大的特征 A g A_g Ag
(4)如果 A g A_g Ag信息增益比小于阈值 ϵ \epsilon ϵ,则置 T T T为单节点树,并将 D D D中实例数最大的类 C k C_k Ck作为该节点的类标记,返回 T T T
(5)否则,对 A g A_g Ag的每一可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai D D D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子节点,由节点及其子节点构成树 T T T,返回 T T T
(6)对第 i i i个子节点,以 D i D_i Di为训练集,以 A − { A g } A-\{A_g\} A{Ag}为特征集,递归调用步骤(1)~(5),得到子树 T i T_i Ti,返回 T i T_i Ti

针对ID3和C4.5算法没有决策树剪枝处理的缺陷,通常采用限制决策树的高度来达到类似于剪枝的效果,这样也进一步的简化了模型的实现过程。

决策树的剪枝

通过前边决策树生成算法的步骤生成的决策树可能对训练数据有很好的拟合效果,但是由于分支过细,可能会包含太多训练集中的信息,导致泛化能力很差,对未知的数据没有准确的分类。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。

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

输出:修剪后的子树 T α T_\alpha Tα

(1)计算每个节点的经验熵
(2)递归的从树的叶节点向上回缩。设一组叶节点回缩到其父节点之前与之后的整体树分别为 T B , T A T_B,T_A TB,TA,其对应的损失函数分别是 C α ( T B ) C_\alpha(T_B) Cα(TB) C α ( T A ) C_\alpha(T_A) Cα(TA),如果 C α ( T A ) ≤ C α ( T B ) C_\alpha(T_A)\leq C_\alpha(T_B) Cα(TA)Cα(TB)则进行剪枝,将父节点变为新的叶节点。
(3)返回(2),直至不能继续为止,得到损失函数最小的子树 T α T_\alpha Tα

CART算法(分类回归树算法)

分类回归树算法完整的包含了决策树从特征选择,决策树生成,决策树剪枝的完整过程。CART假设决策树为二叉树,通过将内部结点取值按照“是”和“否”来划分数据集,左分支为结点取值为“是”的数据集合,右分支为取值为“否”的结点集合,这样就可以递归的将数据集划分为有限个集合。

CART的特征选择

CART的特征选择主要有两种方法:

  • 针对回归树,采用平方误差最小化准则来选择特征及特征的切分点;
  • 针对分类树,采用基尼指数作为准则来选择最优特征和最优切分点;
基尼指数:

分类问题中,假设有 K K K个类,样本点属于第 k k k类的概率为 p k p_k pk,则概率分布的基尼指数定义为 G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum_{k=1}^{K}p_k(1-p_k)=1-\sum_{k=1}^{K}p_{k}^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2对于给定样本集合 D D D,其基尼指数为 G i n i ( p ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(p)=1-\sum_{k=1}^{K}(\frac{|C_k|}{|D|})^2 Gini(p)=1k=1K(DCk)2其中 C k C_k Ck D D D中属于第 k k k类的样本子集, K K K是类的个数。与熵类似,当基尼指数越大,表明集合的不确定性越大。

在实际使用中,如果样本集合 D D D依据特征 A A A的可能取值 a a a分割为两个子集 D 1 D_1 D1 D 2 D_2 D2,则此时样本集合 D D D的基尼指数定义为 G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)

CART的生成
回归树

输入:训练数据集 D D D,停止计算条件

输出:回归树 f ( x ) f(x) f(x)

(1)遍历寻找最优切分变量(最优切分特征)和切分点(最优切分特征的最优切分取值),使得平方误差损失最小,即求解 min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min_{j,s}[\min_{c_1}\sum_{x_i \in R_1(j,s)}(y_i-c_1)^2+\min_{c_2}\sum_{x_i\in R_2(j,s)}(y_i-c_2)^2] j,smin[c1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2]遍历变量 j j j,对固定的切分变量 j j j(特征)扫描切分点 s s s(特征的取值),选取使得平方误差最小的对 ( j , s ) (j,s) (j,s)
注:直观的解释就是遍历训练数据集 D D D的全部特征,对于每一个特征 A i A_i Ai的可能取值 a i a_i ai,计算用特征 A i A_i Ai取值为 a i a_i ai时切分数据集后,使整个数据集的平方误差最小的特征以及特征对应的取值 ( A i , a i ) (A_i,a_i) Aiai,也就是公式中的 ( j , s ) (j,s) (j,s)。在找到使得数据集 D D D平方误差最小的特征和特征值后,用该特征和特征值切分数据集。
(2)使用选定的对 ( j , s ) (j,s) (j,s)划分区域并计算相应的输出值 R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } , R 2 ( j , s ) = { x ∣ x j > s } R_1(j,s)=\{x|x^{(j)}\leq s\},R_2(j,s)=\{x|x^{j}>s\} R1(j,s)={xx(j)s},R2(j,s)={xxj>s} c m ^ = 1 N m ∑ x i ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 \hat{c_m}=\frac{1}{N_m}\sum_{x_i\in R_m(j,s)}y_i,x_\in R_m,m=1,2 cm^=Nm1xiRm(j,s)yi,xRm,m=1,2
(3)继续递归的对两个子区域调用步骤(1)和(2),直到满足停止条件
(4)将输入数据集划分为M个区域 R 1 , R 2 . . . , R M R_1,R_2...,R_M R1,R2...,RM,生成决策树: f ( x ) = ∑ m = 1 M c m ^ I ( x ∈ R m ) f(x)=\sum_{m=1}^{M}\hat{c_m}I(x\in R_m) f(x)=m=1Mcm^I(xRm)

分类树

输入:训练数据集 D D D,停止条件

输出:分类树 f ( x ) f(x) f(x)

(1)遍历训练数据集,对于每一个特征 A i A_i Ai及其可能的取值 a i a_i ai,计算使用 A i = a i A_i=a_i Ai=ai作为切分点将训练集分为 D 1 , D 2 D_1,D_2 D1,D2情况下数据集的基尼指数
(2)从全部可能的特征 A i A_i Ai和其对应的可能取值 a i a_i ai中,选择基尼指数最小的特征和取值来切分当前数据集为 D 1 , D 2 D_1,D_2 D1,D2
(3)对得到的两个子集递归的调用(1)(2)步骤,直到满足停止条件
(4)生成决策树

CART的剪枝

CART剪枝主要由两步构成:

  • (1)首先依据算法从之前生成步骤产生的决策树 T 0 T_0 T0底端开始不断剪枝,直到 T 0 T_0 T0的根节点,形成一个子树序列 { T 0 , T 1 , . . . , T n } \{T_0,T_1,...,T_n\} {T0,T1,...,Tn}
  • (2)通过交叉验证的方式,根据选定的评价函数,从子树序列中选取最优子树。

输入:CART算法生成的决策树 T 0 T_0 T0

输出:最优决策树 T α T_\alpha Tα

(1)设 k = 0 , T = T 0 , α = + ∞ k=0,T=T_0,\alpha=+\infty k=0,T=T0,α=+
(2)对内部结点t自下而上的计算 C ( T t ) , ∣ T t ∣ C(T_t),|T_t| C(Tt),Tt以及 g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 g(t)=\frac{C(t)-C(T_t)}{|T_t|-1} g(t)=Tt1C(t)C(Tt) α = m i n ( α , g ( t ) ) \alpha =min(\alpha ,g(t)) α=min(α,g(t))这里 T t T_t Tt表示以 t t t为根节点的子树, C ( T t ) C(T_t) C(Tt)是该子树对训练数据的预测误差, ∣ T t ∣ |T_t| Tt T t T_t Tt的叶节点个数
(3)对于 g ( t ) = α g(t)=\alpha g(t)=α的内部结点 t t t进行剪枝,并对叶节点 t t t以多数表决的方式决定其类,得到树 T T T
(4)更新 k = k + 1 , α k = α , T k = T k=k+1,\alpha_{k}=\alpha,T_k=T k=k+1,αk=α,Tk=T
(5)如果 T k T_k Tk不是由根节点集两个叶节点组成的树,则返回步骤(2);否则令 T k = T n T_k=T_n Tk=Tn
(6)采用交叉验证在得到的子树序列 { T 0 , T 1 , . . . , T n } \{T_0,T_1,...,T_n\} {T0,T1,...,Tn}找到最优子树

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值