Datawhale-集成学习-学习笔记Day5-前向分步算法

Datawhale-集成学习-学习笔记Day5-前向分步算法

1. 加法模型与前向分步算法

我们可以先了解一下什么是加法模型。加法模型的通式为:
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\sum_{m=1}^{M} \beta_{m} b\left(x ; \gamma_{m}\right) f(x)=m=1Mβmb(x;γm)
其中, b ( x ; γ m ) b\left(x ; \gamma_{m}\right) b(x;γm)为即基本分类器, γ m \gamma_{m} γm为基本分类器的参数, β m \beta_m βm为基本分类器的系数。很显然,我们前面介绍的Adaboost就是一个加法模型。

在Adaboost中系数为基模型的权重,也可以说是基模型的准确率。参数就是各个样本的的权重,最终的结果是各个基模型叠加的结果。

之所以提出加法模型,是因为,这一类的模型学习都有一个通式:
min ⁡ β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) ) \min _{\beta_{m}, \gamma_{m}} \sum_{i=1}^{N} L\left(y_{i}, \sum_{m=1}^{M} \beta_{m} b\left(x_{i} ; \gamma_{m}\right)\right) βm,γmmini=1NL(yi,m=1Mβmb(xi;γm))
其中L为损失函数,我们的目标是通过调整系数和模型参数,将所有基模型的损失和降到最低。

我们可以这样介绍前向分布算法:

输入: T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right)\right\} T={(x1,y1),(x2,y2),,(xN,yN)} x i ∈ X ⊆ R n x_{i} \in \mathcal{X} \subseteq \mathbf{R}^{n} xiXRn y i ∈ Y = { + 1 , − 1 } y_{i} \in \mathcal{Y}=\{+1,-1\} yiY={+1,1}。损失函数 L ( y , f ( x ) ) L(y, f(x)) L(y,f(x)),基函数集合 { b ( x ; γ ) } \{b(x ; \gamma)\} {b(x;γ)}

输出:加法模型f(x).

  1. 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0

  2. m = 1 , 2 , ⋯   , M m=1,2, \cdots ,M m=1,2,,M

    • 极小化损失函数
      ( β m , γ m ) = arg ⁡ min ⁡ β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) \left(\beta_{m}, \gamma_{m}\right)=\arg \min _{\beta, \gamma} \sum_{i=1}^{N} L\left(y_{i}, f_{m-1}\left(x_{i}\right)+\beta b\left(x_{i} ; \gamma\right)\right) (βm,γm)=argβ,γmini=1NL(yi,fm1(xi)+βb(xi;γ))
      得到参数 β m , γ m \beta_{m}, \gamma_{m} βm,γm

    • 更新
      f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_{m}(x)=f_{m-1}(x)+\beta_{m} b\left(x ; \gamma_{m}\right) fm(x)=fm1(x)+βmb(x;γm)

  3. 得到加法模型f(x)

看到这里,可能会有一些疑惑,为什么我们是一步一步的优化,而不是一次性优化所有的参数呢?因为,一次性优化所有的参数是一个非常复杂的优化问题。前向分步算法就是将这一个优化问题简化的算法思想:

  • 我们学习的是加法模型,如果我们可以从前向后,每一步只学习一个基函数及其系数,逐步的逼近优化目标的函数式,就可以简化优化的复杂度。
  • 个人理解:每一步我们只训练当前的最优模型,如果模型的准确率高,我们就加大其系数,即在最终结果中所占的权重,否则就降低系数。
  • 这与Adaboost的思想是一致的。

2. 提升树

想要明白什么是提升树之前,我们需要知道什么是提升方法。提升方法就是:采用加法模型和前向分步算法的获取最优模型的算法。知道了提升方法后,提升树就很好理解了。提升树就是基模型为决策树的提升方法。

对于分类问题来说,决策树是二叉分类树,对于回归问题来说,决策树是二叉回归树。

而提升树模型可以表示为:
f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_{M}(x)=\sum_{m=1}^{M} T\left(x ; \Theta_{m}\right) fM(x)=m=1MT(x;Θm)
我们从前面的叙述中已经知道提升树的学习方法是前向分步算法,但是提升树集体的训练步骤还是需要详细的说一说的。

对于二分类问题来说,我们只需要将Adaboost算法中的基模型设置为决策树即可,这时只是Adaboost算法的一种特殊形式。

除此之外,我们可以对于不同的问题进行讨论。其中,最主要的区别就是使用的损失函数的不同。包括了使用平方误差损失函数的回归问题,使用指数损失函数的分类问题,以及使用一般损失函数的一般决策问题。

我们可以看一下回归问题的提升树,相较于前面提过的分类问题的决策树来说,信息熵和信息增益则变得不那么适用。所以我们可以使用L2损失作为模型的目标函数。

其中:
L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L(y, f(x))=(y-f(x))^2 L(y,f(x))=(yf(x))2
f m ( x ) f_m(x) fm(x)带入后可知:
L ( y , f ( x ) ) = L ( y , f m − 1 ( x ) + T ( x ; Θ m ) ) = [ y − f m − 1 ( x ) − T ( x ; Θ m ) ] 2 = [ r − T ( x ; Θ m ) ] 2 L(y, f(x))=L(y, f_{m-1}(x)+T(x;\Theta_m))\\ =[y-f_{m-1}(x)-T(x;\Theta_m)]^2\\ =[r-T(x;\Theta_m)]^2 L(y,f(x))=L(y,fm1(x)+T(x;Θm))=[yfm1(x)T(x;Θm)]2=[rT(x;Θm)]2
其中:
r = y − f m − 1 ( x ) r=y-f_{m-1}(x) r=yfm1(x)
我们可以知道,r应该是当前已经训练好的模型的残差。我们只需要将当前的基模型去拟合r即可得到最优的当前基模型。

所以,训练步骤为:

输入数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } , x i ∈ X ⊆ R n , y i ∈ Y ⊆ R T=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right)\right\}, x_{i} \in \mathcal{X} \subseteq \mathbf{R}^{n}, y_{i} \in \mathcal{Y} \subseteq \mathbf{R} T={(x1,y1),(x2,y2),,(xN,yN)},xiXRn,yiYR,输出最终的提升树 f M ( x ) f_{M}(x) fM(x)

  • 初始化 f 0 ( x ) = 0 f_0(x) = 0 f0(x)=0
  • 对m = 1,2,…,M:
    • 计算每个样本的残差: r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , ⋯   , N r_{m i}=y_{i}-f_{m-1}\left(x_{i}\right), \quad i=1,2, \cdots, N rmi=yifm1(xi),i=1,2,,N
    • 拟合残差 r m i r_{mi} rmi学习一棵回归树,得到 T ( x ; Θ m ) T\left(x ; \Theta_{m}\right) T(x;Θm)
    • 更新 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_{m}(x)=f_{m-1}(x)+T\left(x ; \Theta_{m}\right) fm(x)=fm1(x)+T(x;Θm)
  • 得到最终的回归问题的提升树: f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_{M}(x)=\sum_{m=1}^{M} T\left(x ; \Theta_{m}\right) fM(x)=m=1MT(x;Θm)

3. 梯度提升树

当损失函数是平方损失和指数损失的时候,每一步的优化是十分简单的。但是对于一般损失函数来说,每一步的优化就会没有那么容易。我们可以在一般函数的优化中,使用梯度学习算法来进行优化。

可以使用损失函数的负梯度,来进行模型的优化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值