机器学习算法进阶学习笔记——GBDT、xgboost与adaboost

机器学习算法进阶学习笔记——GBDT、xgboost与adaboost

GBDT

梯度提升的典型基函数即决策树(尤其是CART)
在第m步的梯度提升是根据为残差数据计算决策树 t m ( x ) \mathrm{t}_{\mathrm{m}}(\mathbf{x}) tm(x)。令树t m ( x ) _{\mathrm{m}}(\mathbf{x}) m(x) 的叶节点数目为J, 即树t m ( x ) _{\mathrm{m}}(\mathrm{x}) m(x) 将输
入空间划 分为 J J J个不相交区域 R 1   m , R 2   m , … , R J m , \mathrm{R}_{1 \mathrm{~m}}, \mathrm{R}_{2 \mathrm{~m}}, \ldots, \mathrm{R}_{\mathrm{Jm}}, R1 m,R2 m,,RJm, 并且决策树t t m ( x ) \mathrm{t}_{\mathrm{m}}(\mathrm{x}) tm(x) 可以在每个区域中给出某个类型的确定性预测。使用指示记号I(x), 对于输入X, t m ( x ) \mathrm{t}_{\mathrm{m}}(\mathbf{x}) tm(x)
t m ( x ⃗ ) = ∑ j = 1 J b j m I ( x ⃗ ∈ R j m ) t_{m}(\vec{x})=\sum_{j=1}^{J} b_{j m} I\left(\vec{x} \in R_{j m}\right) tm(x )=j=1JbjmI(x Rjm)
其中, b j m b_{j m} bjm 是样本X在区域R j m _{j m} jm 的预测值。

使用线性搜索计算学习率,最小化损失函数
F m ( x ⃗ ) = F m − 1 ( x ⃗ ) + γ m ⋅ t m ( x ⃗ i ) γ m = arg ⁡ min ⁡ γ ∑ i = 1 n L ( y i , F m − 1 ( x ⃗ i ) + γ ⋅ t m ( x ⃗ i ) ) \begin{array}{c} F_{m}(\vec{x})=F_{m-1}(\vec{x})+\gamma_{m} \cdot t_{m}\left(\vec{x}_{i}\right) \\ \gamma_{m}=\underset{\gamma}{\arg \min } \sum_{i=1}^{n} L\left(y_{i}, F_{m-1}\left(\vec{x}_{i}\right)+\gamma \cdot t_{m}\left(\vec{x}_{i}\right)\right) \end{array} Fm(x )=Fm1(x )+γmtm(x i)γm=γargmini=1nL(yi,Fm1(x i)+γtm(x i))
进一步: 对树的每个区域分别计算步长, 从而系数b j m _{\mathrm{jm}} jm 被合并到步长中,从而:
F m ( x ⃗ ) = F m − 1 ( x ⃗ ) + ∑ j = 1 J γ j m I ( x ⃗ ∈ R j m ) γ j m = arg ⁡ min ⁡ γ ∑ x ⃗ i ∈ R j m L ( y i , F m − 1 ( x ⃗ i ) + γ ⋅ t m ( x ⃗ i ) ) \begin{array}{c} F_{m}(\vec{x})=F_{m-1}(\vec{x})+\sum_{j=1}^{J} \gamma_{j m} I\left(\vec{x} \in R_{j m}\right) \\ \gamma_{j m}=\underset{\gamma}{\arg \min } \sum_{\vec{x}_{i} \in R_{j m}} L\left(y_{i}, F_{m-1}\left(\vec{x}_{i}\right)+\gamma \cdot t_{m}\left(\vec{x}_{i}\right)\right) \end{array} Fm(x )=Fm1(x )+j=1JγjmI(x Rjm)γjm=γargminx iRjmL(yi,Fm1(x i)+γtm(x i))

xgboost

  • XGBoost是使用梯度提升框杂实现的高效、灵活、可移植的机器学习库,全称是eXtreme Gradient Boosting,是GBDT(GBM)的一个C++实现。它将树的生成并行完成,从而提高学习速度。
  • 一般地说,XGBoost的速度和性能优于sklearn.ensemble.GradientBoostingClassifier类。
  • XGBoost的作者为华盛顿大学陈天奇,并封装了Python接口,随着在机器学习竞赛中的优异表现,其他学者封装完成了R/Julia等接口。

考虑使用二阶导信息
目标函数: J ( f t ) = ∑ i = 1 n L ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) + C J\left(f_{t}\right)=\sum_{i=1}^{n} L\left(y_{i}, \hat{y}_{i}^{(t-1)}+f_{t}\left(x_{i}\right)\right)+\Omega\left(f_{t}\right)+C J(ft)=i=1nL(yi,y^i(t1)+ft(xi))+Ω(ft)+C
根据Taylor展式:
f ( x + Δ x ) ≈ f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 f(x+\Delta x) \approx f(x)+f^{\prime}(x) \Delta x+\frac{1}{2} f^{\prime \prime}(x) \Delta x^{2} f(x+Δx)f(x)+f(x)Δx+21f(x)Δx2
令, g i =  def  = ∂ L ( y i , y ^ i ( t − 1 ) ) ∂ y ^ i ( t − 1 ) , h i = = ∂ 2 L ( y i , y ^ i ( t − 1 ) ) ∂ y ^ i ( t ) g_{i} \stackrel{\text { def }}{=}=\frac{\partial L\left(y_{i}, \hat{y}_{i}^{(t-1)}\right)}{\partial \hat{y}_{i}^{(t-1)}}, \quad h_{i}==\frac{\partial^{2} L\left(y_{i}, \hat{y}_{i}^{(t-1)}\right)}{\partial \hat{y}_{i}^{(t)}} gi= def =y^i(t1)L(yi,y^i(t1)),hi==y^i(t)2L(yi,y^i(t1))
得:
J ( f t ) ≈ ∑ i = 1 n [ L ( y i , y ^ i ( t − 1 ) ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) + C J\left(f_{t}\right) \approx \sum_{i=1}^{n}\left[L\left(y_{i}, \hat{y}_{i}^{(t-1)}\right)+g_{i} f_{t}\left(x_{i}\right)+\frac{1}{2} h_{i} f_{t}^{2}\left(x_{i}\right)\right]+\Omega\left(f_{t}\right)+C J(ft)i=1n[L(yi,y^i(t1))+gift(xi)+21hift2(xi)]+Ω(ft)+C

目标函数继续化简:

 对  F : J ( f t ) = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 ] + γ ⋅ T + C \text { 对 } \mathcal{F}: J\left(f_{t}\right)=\sum_{j=1}^{T}\left[\left(\sum_{i \in I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in I_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma \cdot T+C   F:J(ft)=j=1TiIjgiwj+21iIjhi+λwj2+γT+C
文义 G j = = ∑ i ∈ I j g i , H j = = ∑ i ∈ I j h i G_{j}==\sum_{i \in I_{j}} g_{i}, H_{j}==\sum_{i \in I_{j}} h_{i} Gj==iIjgi,Hj==iIjhi
 人   而  ‾ , J ( f t ) = ∑ j = 1 T [ G j w j + 1 2 ( H j + λ ) w j 2 ] + γ ⋅ T + C \text { 人 } \overline{\text { 而 }}, J\left(f_{t}\right)=\sum_{j=1}^{T}\left[G_{j} w_{j}+\frac{1}{2}\left(H_{j}+\lambda\right) w_{j}^{2}\right]+\gamma \cdot T+C     ,J(ft)=j=1T[Gjwj+21(Hj+λ)wj2]+γT+C
对W求偏导,得
∂ J ( f t ) ∂ w j = G j + ( H j + λ ) w j = 0 ⇒ w j = − G j H j + λ \frac{\partial J\left(f_{t}\right)}{\partial w_{j}}=G_{j}+\left(H_{j}+\lambda\right) w_{j}=0 \Rightarrow w_{j}=-\frac{G_{j}}{H_{j}+\lambda} wjJ(ft)=Gj+(Hj+λ)wj=0wj=Hj+λGj
回代入目标函数数, 得 J ( f t ) = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ ⋅ T J\left(f_{t}\right)=-\frac{1}{2} \sum_{j=1}^{T} \frac{G_{j}^{2}}{H_{j}+\lambda}+\gamma \cdot T J(ft)=21j=1THj+λGj2+γT

XGBoost小结
相对于传统的GBDT,XGBoost使用了二阶信息,可以更快的在训练集上收敛。由于“随机森林族”本身具备过拟合的优势,因此XGBoost仍然一定程度的具有该特性。XGBoost的实现中使用了并行/多核计算,因此训练速度快;同时它的原生语言为C/C++,这是它速度快的实践原因。

adaboost

设训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x N , y N ) } \mathrm{T}=\left\{\left(\mathrm{x}_{1}, \mathrm{y}_{1}\right),\left(\mathrm{x}_{2}, \mathrm{y}_{2}\right) \ldots\left(\mathrm{x}_{\mathrm{N}}, \mathrm{y}_{\mathrm{N}}\right)\right\} T={(x1,y1),(x2,y2)(xN,yN)}
初始化训练数据的权值分布
D 1 = ( w 11 , w 12 ⋯ w 1 i ⋯   , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , ⋯   , N D_{1}=\left(w_{11}, w_{12} \cdots w_{1 i} \cdots, w_{1 N}\right), w_{1 i}=\frac{1}{N}, i=1,2, \cdots, N D1=(w11,w12w1i,w1N),w1i=N1,i=1,2,,N

使用具有权值分布Dm的训练数据集学习,得到基本分类器
G m ( x ) : χ → { − 1 , + 1 } G_{m}(x): \chi \rightarrow\{-1,+1\} Gm(x):χ{1,+1}
计算Gm(x)在训练数据集上的分类误差率
e m = P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_{m}=P\left(G_{m}\left(x_{i}\right) \neq y_{i}\right)=\sum_{i=1}^{N} w_{m i} I\left(G_{m}\left(x_{i}\right) \neq y_{i}\right) em=P(Gm(xi)=yi)=i=1NwmiI(Gm(xi)=yi)
计算Gm(x)的系数
α m = 1 2 log ⁡ 1 − e m e m \alpha_{m}=\frac{1}{2} \log \frac{1-e_{m}}{e_{m}} αm=21logem1em

更新训练数据集的权值分布
D m + 1 = ( w m + 1 , 1 , w m + 1 , 2 ⋯ w m + 1 , i ⋯   , w m + 1 , N ) w m + 1 , i = w m i Z m exp ⁡ ( − α m y i G m ( x i ) ) , i = 1 , 2 , ⋯   , N \begin{array}{l} D_{m+1}=\left(w_{m+1,1}, w_{m+1,2} \cdots w_{m+1, i} \cdots, w_{m+1, N}\right) \\ w_{m+1, i}=\frac{w_{m i}}{Z_{m}} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right), i=1,2, \cdots, N \end{array} Dm+1=(wm+1,1,wm+1,2wm+1,i,wm+1,N)wm+1,i=Zmwmiexp(αmyiGm(xi)),i=1,2,,N
这里,Zm是规范化因子
Z m = ∑ i = 1 N w m i exp ⁡ ( − α m y i G m ( x i ) ) Z_{m}=\sum_{i=1}^{N} w_{m i} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right) Zm=i=1Nwmiexp(αmyiGm(xi))
它的目的仅仅是使D m + 1 _{\mathrm{m}+1} m+1 成为一个概率分布
w m + 1 , i = w m i Z m exp ⁡ ( − α m y i G m ( x i ) ) ⇒ Z m w m + 1 , i = w m i exp ⁡ ( − α m y i G m ( x i ) ) ⇒ Z 1 w 2 , i = w 1 i exp ⁡ ( − α 1 y i G 1 ( x i ) ) w_{m+1, i}=\frac{w_{m i}}{Z_{m}} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right) \Rightarrow Z_{m} w_{m+1, i}=w_{m i} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right) \Rightarrow Z_{1} w_{2, i}=w_{1 i} \exp \left(-\alpha_{1} y_{i} G_{1}\left(x_{i}\right)\right) wm+1,i=Zmwmiexp(αmyiGm(xi))Zmwm+1,i=wmiexp(αmyiGm(xi))Z1w2,i=w1iexp(α1yiG1(xi))

构建基本分类器的线性组含
f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^{M} \alpha_{m} G_{m}(x) f(x)=m=1MαmGm(x)
得到最终分类器
G ( x ) = sign ⁡ ( f ( x ) ) = sign ⁡ ( ∑ m = 1 M α m G m ( x ) ) G(x)=\operatorname{sign}(f(x))=\operatorname{sign}\left(\sum_{m=1}^{M} \alpha_{m} G_{m}(x)\right) G(x)=sign(f(x))=sign(m=1MαmGm(x))

AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的分类学习方法。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值