决策树以及AdaBoost(随时更改,来自统计学习方法)

本文深入解析决策树算法,包括熵、条件熵、信息增益等概念,以及ID3、C4.5和CART算法的工作原理。探讨了决策树剪枝技术,提升方法如AdaBoost和GBDT的原理与应用,提供了丰富的数学公式和实例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

决策树(decision tree)

熵(entropy)是随机变量不确定性的度量。随机变量 X X X的熵的定义为

H ( X ) = H ( p ) = − ∑ i = 1 n p i log ⁡ p i H(X)=H(p)=-\sum_{i=1}^np_i\log{p_i} H(X)=H(p)=i=1npilogpi
设有随机变量 ( X , Y ) (X,Y) (X,Y),其联合概率分布为:

P ( X = x i , Y = y j ) = p i j ,   i = 1 , 2 , ⋯   , m P(X=x_i,Y=y_j)=p_{ij},\ i=1,2,\cdots,m P(X=xi,Y=yj)=pij, i=1,2,,m
条件熵(conditional entropy) 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,\cdots ,n. pi=P(X=xi), i=1,2,,n.

熵和条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)。令 0 log ⁡ 0 = 0 0\log0=0 0log0=0

信息增益:特征 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)

信息增益的算法

输入:训练数据集 D D D和特征 A A A

输出: 特征 A A A对训练数据集 D D D的信息增益 g ( D , A ) 。 g(D,A)。 g(D,A)

(1)计算数据集 D D D的经验熵 H ( D ) H(D) H(D)
H ( D ) = − ∑ k = 1 k ∣ C k ∣ ∣ D ∣ log ⁡ 2 ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^k\frac{\lvert C_k\lvert}{\lvert D \lvert}\log_2\frac{\lvert C_k \lvert}{\lvert D \lvert} H(D)=k=1kDCklog2DCk
(2)计算特征 A A A对数据集 D D D的经验条件熵 H ( D ∣ A ) H(D\lvert A) H(DA)
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 k ∣ D i k ∣ ∣ D i ∣ log ⁡ 2 ∣ D i k ∣ ∣ D i ∣ \begin{aligned} 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{|D_{ik}|}{|D_i|}\log_2\frac{|D_{ik}|}{|D_i|} \end{aligned} H(DA)=i=1nDDiH(Di)=i=1nDDik=1kDiDiklog2DiDik
(3)计算信息增益

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 ) g_R(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 ) 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 ⁡ 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}\log_2\frac{|D_i|}{|D|} HA(D)=i=1nDDilog2DDi n n n是特征 A A A取值的个数。

决策树生成算法

  1. ID3 算法 → \rightarrow 信息增益准则选择特征,选择信息增益最大的特征作为结点的特征
  2. C4.5 算法 → \rightarrow 用信息增益比来选择特征

剪枝

决策树的剪枝往往通过极小化决策树整体的损失函数(loss function)或代价函数(cost function)来实现。

树的节点分为内部节点和叶节点。

设树 T T T的叶节点的个数为 ∣ T ∣ |T| T t t t是树 T T T的叶节点,该叶节点有 N t N_t Nt个样本点,其中 k k k类的样本点有 N t k N_{tk} Ntk个, k = 1 , 2 , ⋯   , K , H t ( T ) k=1,2,\cdots,K,H_t(T) k=1,2,,KHt(T)为叶节点 t t t上的经验熵, α ≥ 0 \alpha \ge 0 α0为参数,则决策树学习的损失函数可以定义为:
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha |T| Cα(T)=t=1TNtHt(T)+αT
其中经验熵为
H t ( T ) = − ∑ k N t k N t log ⁡ N t k N t H_t(T)=-\sum_{k}\frac{N_{tk}}{N_t}\log\frac{N_{tk}}{N_t} Ht(T)=kNtNtklogNtNtk
记:

C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t k log ⁡ N t k N t \begin{aligned} C(T)&=\sum_{t=1}^{|T|}N_tH_t(T) \\ &=-\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}\log\frac{N_{tk}}{N_t} \end{aligned} C(T)=t=1TNtHt(T)=t=1Tk=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 ∣ |T| T表示模型复杂度,参数 α ≥ 0 \alpha \ge 0 α0控制两者之间的影响。较大的 α \alpha α促使选择较简单的模型(树),较小的 α \alpha α促使选择较复杂的模型(树)。 α = 0 \alpha=0 α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。

树的剪枝算法

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

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

  1. 计算每个结点的经验熵。
  2. 递归地从树的叶结点向上回缩。

    设一组叶结点回缩到其父结点之前和之后的整体树分别为 T B T_B TB T A T_A 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) \le C_\alpha(T_B) Cα(TA)Cα(TB)
    则进行剪枝,即将父结点变为新的叶结点。
  3. 返回2,直至不能继续为止,得到损失函数最小的子树 T α T_\alpha Tα

CART(classification and regression tree)算法

CART(分类与回归树)假设决策树为二叉树。

  1. 回归树 → \rightarrow 平方误差最小化准则
  2. 分类树 → \rightarrow 基尼指数(Gini index)最小化准则

最小二乘回归树生成算法

输入:训练数据集 D D D

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

在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:

  1. 选择最优切分变量 j j j与切分点 s s s,求解
    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} \left[ \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\right] j,sminc1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2
    遍历变量 j j j,对固定的切分变量 j j j扫描切分的 s s s,选择使上式达到最小值的对 ( j , s ) (j,s) (j,s)
  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)} \le s \},\ R_2(j,s)=\{ x|x^{(j)} \gt s \} R1(j,s)={xx(j)s}, R2(j,s)={xx(j)>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 c^m=Nm1xiRm(j,s)yi ,xRm,m=1,2
  3. 继续对两个子区域调用步骤1、2,直至满足停止条件。
  4. 将输入空间划分为 M M M个区域 R 1 , R 2 , ⋯   , R M R_1,R_2,\cdots,R_M R1,R2,,RM,生成决策树:
    f ( x ) = ∑ m = 1 M c ^ m I ( x ∈ R m ) f(x)=\sum_{m=1}^M \hat{c}_mI(x \in R_m) f(x)=m=1Mc^mI(xRm)

分类树

基尼指数

分类问题中,假设有 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}^Kp_k(1-p_k)=1-\sum_{k=1}^K{p_k}^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
对于二分类问题,若样本点属于第1类的概率是 p p p,则概率分布的的基尼指数为
G i n i ( p ) = 2 p ( 1 − p ) Gini(p)=2p(1-p) Gini(p)=2p(1p)
对于给定的样本集合 D D D,其基尼指数为
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{k=1}^K \left( \frac{|C_k|}{|D|} \right)^2 Gini(D)=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 1 = { ( x , y ) ∈ D   ∣   A ( x ) = a } ,   D 2 = D − D 1 D_1=\{ (x,y) \in D \ |\ A(x)=a\},\ D_2=D-D_1 D1={(x,y)D  A(x)=a}, D2=DD1
则在特征 A A A的条件下,集合 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)
基尼指数 G i n i ( D ) Gini(D) Gini(D)表示集合 D D D的不确定性,基尼指数 G i n i ( D , A ) Gini(D,A) Gini(D,A)表示经 A = a A=a A=a分割后集合 D D D的不确定性。基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。

CART生成算法

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

输出:CART决策树

根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:

  1. 设结点的训练数据集为 D D D,计算现有特征对该数据集的基尼指数。此时,对每一个特征 A A A,对其可能取的每个值 a a a,根据样本点对 A = a A=a A=a的测试为“是”或“否”将 D D D分割成 D 1 D_1 D1 D 2 D_2 D2两部分,计算 A = a A=a A=a时的基尼指数。
  2. 在所有可能的特征 A A A以及它们所有可能的切分点 a a a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
  3. 对两个子结点递归地调用1、2,直至满足停止条件。
  4. 生成CART决策树。
CART剪枝

CART剪枝算法由两步组成:

  1. 从生成算法产生的决策树 T 0 T_0 T0底端开始不断剪枝,直到 T 0 T_0 T0的根结点,形成一个子树序列 { T 0 , T − 1 , ⋯   , T n } \{T_0,T-1,\cdots,T_n\} {T0,T1,,Tn}
  2. 通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。
    剪枝过程中,计算子树的损失函数:
    C α ( T ) = C ( T ) + α   ∣ T ∣ C_\alpha(T)=C(T)+\alpha\ |T| Cα(T)=C(T)+α T

其中, T T T为任意子树, C ( T ) C(T) C(T)为对训练数据的预测误差(如基尼指数), ∣ T ∣ |T| T为子树的叶结点个数, α ≥ 0 \alpha \ge 0 α0为参数, C α ( T ) C_\alpha(T) Cα(T)为参数是 α \alpha α时的子树 T T T的整体损失。参数 α \alpha α权衡训练数据的拟合程度与模型的复杂度。

α \alpha α大的时候,最优子树 T α T_\alpha Tα偏小;当 α \alpha α小的时候,最优子树 T α T_\alpha Tα偏大。极端情况下,当 α = 0 \alpha=0 α=0时,整体树是最优的。当 α → ∞ \alpha \rightarrow \infty α时,根结点组成的单节点树是最优的。

可以用递归的方法对数进行剪枝。将 α \alpha α从小增大 0 = α 0 < α 1 < ⋯ < α n < + ∞ 0=\alpha_0 \lt \alpha_1 \lt \cdots \lt \alpha_n \lt +\infty 0=α0<α1<<αn<+,产生一系列的区间 [ α i , α i + 1 ) , i = 0 , 1 , ⋯   , n [\alpha_i,\alpha_{i+1}),i=0,1, \cdots,n [αi,αi+1),i=0,1,,n;剪枝得到的子树序列对应着 α ∈ [ α i , α i + 1 ) , i = 0 , 1 , ⋯   , n \alpha \in [\alpha_i,\alpha_{i+1}),i=0,1,\cdots,n α[αi,αi+1),i=0,1,,n的最优子树序列 { T 0 , T − 1 , ⋯   , T n } \{T_0,T-1,\cdots,T_n\} {T0,T1,,Tn},序列中的子树是嵌套的。

具体地,从整体树 T 0 T_0 T0开始剪枝。对 T 0 T_0 T0的任意内部结点 t t t,以 t t t为单结点树的损失函数是
C α ( t ) = C ( t ) + α C_\alpha(t)=C(t)+\alpha Cα(t)=C(t)+α
t t t为根结点的子树 T t T_t Tt的损失函数是
C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_\alpha(T_t)=C(T_t)+\alpha|T_t| Cα(Tt)=C(Tt)+αTt
α = 0 \alpha=0 α=0 α \alpha α充分小时,有不等式
C α ( T t ) < C α ( t ) C_\alpha(T_t) < C_\alpha(t) Cα(Tt)<Cα(t)
α \alpha α增大时,在某一 α \alpha α
C α ( T t ) = C α ( t ) C_\alpha(T_t) = C_\alpha(t) Cα(Tt)=Cα(t)
α \alpha α再增大时, C α ( T t ) > C α ( t ) C_\alpha(T_t) > C_\alpha(t) Cα(Tt)>Cα(t).只有 α = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \alpha=\frac{C(t)-C(T_t)}{|T_t|-1} α=Tt1C(t)C(Tt) T t T_t Tt t t t有相同的损失函数值,而 t t t的结点少,因此 t t t T t T_t Tt更可取,对 T t T_t Tt进行剪枝。
为此,对 T 0 T_0 T0中每一内部结点 t t t计算
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)
它表示剪枝后整体损失函数减少的程度。在 T 0 T_0 T0中剪去 g ( t ) g(t) g(t)最小的 T t T_t Tt,将得到的子树作为 T 1 T_1 T1,同时将最小的 g ( t ) g(t) g(t)设为 α 1 \alpha_1 α1. T 1 T_1 T1为区间 [ α 1 , α 2 ) [\alpha_1,\alpha_2) [α1,α2)的最优子树。

如此剪下去,直至得到根结点。在这一过程中,不断地增加 α \alpha α的值,产生新的区间。

CART剪枝算法

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

  1. k = 0 , T = T 0 k=0,T=T_0 k=0,T=T0
  2. α = + ∞ \alpha=+\infty α=+
  3. 自下而上地对各内部结点 t t t计算 C ( T t ) C(T_t) C(Tt) ∣ T t ∣ |T_t| Tt以及
    g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 α = m i n ( α , g ( t ) ) g(t)=\frac{C(t)-C(T_t)}{|T_t|-1} \\ \alpha=min(\alpha,g(t)) g(t)=Tt1C(t)C(Tt)α=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的叶结点个数。
  4. g ( t ) = a g(t)=a g(t)=a的内部结点 t t t进行剪枝,并对叶结点 t t t以多数表决法决定其分类,得到树 T T T
  5. k = k + 1 , α k = α , T k = T k=k+1,\alpha_k=\alpha,T_k=T k=k+1,αk=α,Tk=T
  6. 如果 T k T_k Tk不是有根结点及两个叶结点构成的树,则回到步骤3,否则令 T k = T n T_k=T_n Tk=Tn
  7. 采用交叉验证法在子树序列 T 0 , T 1 , ⋯   , T n T_0,T_1,\cdots,T_n T0,T1,,Tn中选取最优子树 T α T_\alpha Tα

提升方法(boosting)

AdaBoost算法

例子

训练数据表:

序号12345678810
x0123456789
y111-1-1-1111-1

前向分步算法(forward stagewise algorithm)

每一步都只学习一个基函数及其系数。

AdaBoost算法是前向分步加法算法的特例。

提升树(boosting tree)

以分类树或回归树为基本分类器。提升方法采用加法模型与前向分步算法。决策树为二叉树或二叉回归树。

f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1MT(x;Θm)
其中, T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)表示决策树; Θ m \Theta_m Θm为决策树的参数; M M M为树的个数。

Θ ^ m = a r g   min ⁡ Θ m ∑ m = 1 N L ( y i , f m − 1 ( x i ) + T ( x i ; Θ m ) ) \hat{\Theta}_m=arg \ \min_{\Theta_m} \sum_{m=1}^N L(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)) Θ^m=arg Θmminm=1NL(yi,fm1(xi)+T(xi;Θm))

损失函数

平方误差损失函数 → \to 回归问题

指数损失函数 → \to 分类问题

一般损失函数 → \to 一般决策问题

梯度提升(gradient boosting)

梯度提升树GBDT

关键是利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,拟合一个回归树。

− [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] -\left[ \frac{\partial L(y,f(x_i))}{\partial f(x_i)} \right] [f(xi)L(y,f(xi))]
讲解GBDT的一个不错的博客
结合下面帮助理解
l e a r n r a t e : 0.1 ⇒ 1.475 − 0.1 × 0.375 = 1.4375 learn rate:0.1 \Rightarrow 1.475-0.1\times0.375=1.4375 learnrate:0.11.4750.1×0.375=1.4375

indexidageweightlabelf_0res_1f_1res_2f_2res_3f_3res_4f_4res_5f_5
015201.11.475-0.3751.4375-0.33751.40375-0.303751.373375-0.2733751.346037-0.2460371.321434
127301.31.475-0.1751.4575-0.15751.44175-0.141751.427575-0.1275751.414818-0.1148181.403336
2321701.71.4750.2251.49750.20251.517750.182251.5359750.1640251.5523770.1476221.567140
3430601.81.4750.3251.50750.29251.536750.263251.5630750.2369251.5867680.2132321.608091

l e a r n r a t e : 0.2 ⇒ 1.475 − 0.2 × 0.375 = 1.4 learn rate:0.2 \Rightarrow 1.475-0.2\times 0.375 = 1.4 learnrate:0.21.4750.2×0.375=1.4

indexidageweightlabelf_0res_1f_1res_2f_2res_3f_3res_4f_4res_5f_5
015201.11.475-0.3751.40-0.301.340-0.2401.2920-0.19201.25360-0.153601.222880
127301.31.475-0.1751.44-0.141.412-0.1121.3896-0.08961.37168-0.071681.357344
2321701.71.4750.2251.520.181.5560.1441.58480.11521.607840.092161.626272
3430601.81.4750.3251.540.261.5920.2081.63360.16641.666880.133121.693504
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值