决策树算法原理,剪枝详解

背景

决策树是一种可以用于分类和回归任务的算法。它可以被认为是一个if-then规则的集合。本博客主要介绍三种决策树模型:ID3,C4.5,CART
决策树由两种类型的节点构成:内部节点代表特征,叶结点代表一个类或者一个回归值。

原理

特征选择

直观上,需要选择分类能力好的特征,信息增益能够很好的表示这一只管准则。

信息增益


  1. 熵(entropy)是表示随机变量不确定性的度量,设X是一个离散随机变量,概率分布为 P ( X = x i ) = p i , i = 1 , 2 , . . . , n P(X=x_i)=p_i, i=1,2,...,n P(X=xi)=pi,i=1,2,...,n。则随机变量X的熵定义为:
    H ( X ) = − ∑ i = 1 n p i log ⁡ p i H(X)=-\sum_{i=1}^{n}p_i\log p_i H(X)=i=1npilogpi
    也可以写成 H ( p ) = − ∑ i = 1 n p i log ⁡ p i H(p)=-\sum_{i=1}^{n}p_i\log p_i H(p)=i=1npilogpi
    熵越大,随机变量的不确定性就越大。
    当随机变量只取两个值, P ( X = 1 ) = p P(X=1)=p P(X=1)=p, P ( X = 0 ) = 1 − p P(X=0)=1-p P(X=0)=1p
    H ( p ) = − p l o g p − ( 1 − p ) l o g ( 1 − p ) H(p)=-plogp-(1-p)log(1-p) H(p)=plogp(1p)log(1p)
    此时 H ( p ) H(p) H(p) p p p变化的曲线如图所示:
    决策树算法原理,剪枝详解_第1张图片
    可以看出p=0或p=1时,随机变量完全没有不确定性。p=0.5时,不确定性最大,熵也最大。

  2. 条件熵,表示在给定随机变量X的条件下,随机变量Y的条件熵 H ( Y ∣ X ) H(Y|X) H(YX):
    H ( Y ∣ X ) = ∑ p i H ( Y ∣ X = x i ) H(Y|X)=\sum p_i H(Y|X=x_i) H(YX)=piH(YX=xi)

  3. 信息增益 g ( D , A ) g(D,A) g(D,A)表示得知特征A的信息而使得数据集D的不确定性减少的程度:
    g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)
    信息增益的算法:
    假设训练数据集 D D D,K个类别C_k,特征A有n个不同取值,根据这n个取值将D划分为D_1,D_2,…,D_n
    H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log ⁡ ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^{K}\frac{|C_k|}{|D|}\log \frac{|C_k|}{|D|} H(D)=k=1KDCklogDCk
    H ( D ∣ A ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ log ⁡ ∣ D i k ∣ ∣ D i ∣ H(D|A)=-\sum_{i=1}^{n} \frac{|D_i|}{|D|}\sum_{k=1}^{K}\frac{|D_{ik}|}{|D_i|}\log \frac{|D_{ik}|}{|D_i|} H(DA)=i=1nDDik=1KDiDiklogDiDik
    g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)

  4. 信息增益比:
    g R ( D , A ) = g ( D , A ) H A ( D ) g_R(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 ⁡ ∣ D i ∣ ∣ D ∣ {H_A(D)}=-\sum_{i=1}^{n} \frac{|D_i|}{|D|}\log \frac{|D_i|}{|D|} HA(D)=i=1nDDilogDDi

ID3 算法

ID3算法在每轮递归中选择信息增益最大的特征 A g A_g Ag,作为根节点,按照该特征将结点T连接子节点 T i T_i Ti,再对每个子节点 T i T_i Ti递归的调用构建决策树的算法。
最终输出结果是一颗多叉树

C4.5算法

与ID3流程相同,不过在选择特征时选择信息增益比最大的特征。
最终结果是一颗多叉树

CART(Classification and Regression Tree)

从名字可以知道,该算法既可以实现分类,也可以实现回归。
CART树是一颗二叉树,所以对每个特征,都选一个二值切分点。

CART用于分类

其中分类算法特征选择的依据是基尼指数,在每一轮迭代中,选择该特征条件下的基尼指数 G i n i ( D , A ) Gini(D,A) Gini(D,A)最小的特征:
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 用于回归

一颗回归树对应在输入空间的一个划分,划分为M个单元 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R1,R2,...,RM,以及在每个单元上的一个输出值 c m c_m cm,于是回归树可表示为:
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x)=\sum_{m=1}^M c_mI(x \in R_m) f(x)=m=1McmI(xRm)
可以用平方误差 ∑ ( y i − f ( x i ) ) 2 \sum (y_i-f(x_i))^2 (yif(xi))2来表示回归树对于训练数据的预测误差。
则单元 R m R_m Rm上的 c m c_m cm的最优值是 R m R_m Rm上所有实例对应的 y i y_i yi的均值,即:
c ^ m = a v e ( y i ∣ x i ∈ R m ) \hat{c}_m=ave(y_i|x_i \in R_m) c^m=ave(yixiRm)
构建回归树的问题主要是怎么样对输入空间进行切分,CART采用启发式的方法,选择第j个变量 x ( j ) x^{(j)} x(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)}<=s\}\\ R_2(j,s)=\{x|x^{(j)}>s\} R1(j,s)={xx(j)<=s}R2(j,s)={xx(j)>s}
然后寻找最优切分变量和最优切分点。
即求解:
m i n j , s [ m i n c 1 ∑ x ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \mathop{min}\limits_{j,s} [\mathop{min}\limits_{c1} \sum_{x \in R_{1(j,s)}}(y_i-c1)^2+\mathop{min}\limits_{c2} \sum_{x \in R_{2(j,s)}}(y_i-c2)^2] j,smin[c1minxR1(j,s)(yic1)2+c2minxR2(j,s)(yic2)2]
c 1 ^ m = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) c 2 ^ m = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) \hat{c_1}_m=ave(y_i|x_i \in R_{1(j,s)})\\ \hat{c_2}_m=ave(y_i|x_i \in R_{2(j,s)}) c1^m=ave(yixiR1(j,s))c2^m=ave(yixiR2(j,s))
对固定输入特征 j j j可以找到最优切分点s,遍历所有特征,就可以找到最优切分变量 j j j,构成 ( j , s ) (j,s) (j,s),对每个区域递归点进行上述划分,直到满足终止条件,这样就可以生成一颗回归树。

剪枝

一颗完全生长的决策树难免会遇到过拟合的情况。因此,我们需要对决策树进行剪枝,提升模型的泛化能力。
剪枝分为预剪枝和后剪枝,这里主要讲解后剪枝。
在剪枝过程中,计算加入正则项之后子树的损失函数,
C α ( T ) = C ( T ) + α ∣ T ∣ C_\alpha(T)=C(T)+\alpha|T| Cα(T)=C(T)+αT
对固定的 α \alpha α,一定存在使损失函数 C α ( T ) C_\alpha(T) Cα(T)最小的子树,将其表示为 T α T_\alpha Tα
可以用递归的方法对树进行剪枝, α \alpha α从小到大得到一系列的区间,剪枝得到对应着区间的最优子树 T 0 , T 1 , . . . , T n {T_0,T_1,...,T_n} T0,T1,...,Tn,序列中的子树是嵌套的。
具体的,从整体树 T 0 T_0 T0开始剪枝,对于 T 0 T_0 T0的任意内部结点 t t t, 以t为单节点树的损失函数为:
C α ( t ) = C ( t ) + α C_\alpha(t) = C(t)+\alpha Cα(t)=C(t)+α
以t为根节点的子树的损失函数为:
C α ( T t ) = C ( T t ) + α C_\alpha(T_t) = C(T_t)+\alpha Cα(Tt)=C(Tt)+α
α \alpha α充分小时,有不等式:
C α ( T t ) < C α ( t ) C_\alpha(T_t)Cα(Tt)<Cα(t)
随着 α \alpha α增大,在某一处 α = C α ( t ) − C α ( T t ) ∣ T t ∣ − 1 \alpha=\frac{C_\alpha(t)-C_\alpha(T_t)}{|T_t|-1} α=Tt1Cα(t)Cα(Tt)时,有 C α ( T t ) = C α ( t ) C_\alpha(T_t)=C_\alpha(t) Cα(Tt)=Cα(t)
T t T_t Tt t t t相比损失相同但结点更多,因此将 T t T_t Tt剪掉。
g ( t ) = C α ( t ) − C α ( T t ) ∣ T t ∣ − 1 g(t)=\frac{C_\alpha(t)-C_\alpha(T_t)}{|T_t|-1} g(t)=Tt1Cα(t)Cα(Tt)
表示剪枝后整体损失函数的减小程度,在剪枝过程中,每次迭代自下而上寻找当前 g ( t ) g(t) g(t)最小的树。
一共剪枝n次,利用交叉验证法,从 T 0 , T 1 , . . . , T n T_0,T_1,...,T_n T0,T1,...,Tn中选择最优子树 T α T_{\alpha} Tα

你可能感兴趣的:(机器学习,决策树)