XGBoost - Classification

1 Classification and Regression Tree (CART):

CART:是一种决策树模型,可以用于分类或者回归

CART学习算法步骤:

Step1:决策树生成:用训练数据生成决策树,生成的树尽可能大

Step2:决策树剪枝:基于损失函数最小化进行剪枝,用验证数据对生成的数据剪枝

最优化策略
分类树最优化策略:基尼指数最小化策略
回归树最优化策略:平方损失最小化策略

1.1 分类树(Classification Tree)

分类树使用基尼指数作为划分依据

基尼指数计算公式:

Step1:计算特征的Gini值,确定该特征下的最佳分裂点

G i n i ( D ) = 1 − ∑ k − 1 K p k 2 Gini(D) = 1- \sum^{K}_{k-1}p^2_k Gini(D)=1k1Kpk2

Step2:计算该特征的Gini_index,确定最佳的特征进行分裂

G i n i _ i n d e x ( D , a ) = ∑ v = 1 V D v D G i n i ( D v ) Gini\_index(D,a) = \sum^{V}_{v=1}\frac{D^v}{D}Gini(D^v) Gini_index(D,a)=v=1VDDvGini(Dv)

基尼值计算示例
请添加图片描述
有房子的基尼值:有房子的样本有3个(序号:1、4、7),对应是否拖欠贷款有3个no,0个yes

G i n i ( h o u s e , y e s ) = 1 − ( 0 3 ) 2 − ( 3 3 ) 2 = 0 Gini(house, yes) = 1 - (\frac{0}{3})^2-(\frac{3}{3})^2 = 0 Gini(house,yes)=1(30)2(33)2=0

没有房子的基尼值:没有房子的样本有7个(序号:2、3、5、6、8、9、10),对应是否拖欠贷款有4个no,3个yes

G i n i ( h o u s e , n o ) = 1 − ( 3 7 ) 2 − ( 4 7 ) 2 = 0.4898 Gini(house,no) = 1 - (\frac{3}{7})^2-(\frac{4}{7})^2 = 0.4898 Gini(house,no)=1(73)2(74)2=0.4898

计算最终的基尼指数:没有房子的样本有7个,有房子的样本有3个

G i n i _ i n d e x = ( D , h o u s e ) = 7 10 ∗ 0.4898 + 3 10 ∗ 0 = 0.343 Gini\_index=(D, house) = \frac{7}{10}*0.4898+ \frac{3}{10}*0=0.343 Gini_index=(D,house)=1070.4898+1030=0.343

ps. 如果是数值型变量,现将其按升序排列,然后每两个相邻值的平均数作为候选分类点,找出其中Gini值最小的点作为分裂点(如果有相同的Gini值,就任选一个)

最终对比变量之间的Gini_index,Gini_index为最小值的特征作为分裂特征(如果有相同的Gini_index值,就任选一个)

重复上述步骤,直到每个叶子结点纯度达到最高

1.2 回归树(Regression Tree)

回归树使用平方损失来表示回归树对于训练数据的预测误差,平方误差最小处即为最优输出值

∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum\limits_{x_i \in R_m}(y_i - f(x_i))^2 xiRm(yif(xi))2

回归树采用采用启发式的方法,根据特征分裂成左子树和右子树。如,对于第 j j j个变量 x j x_j xj作为划分特征, x j = s x_j=s xj=s为其分裂点,那么样本就被划分为:

R 1 ( j , s ) = { x ∣ x i ⩽ s } R_1(j,s) = \{x|x_i\leqslant {s}\} R1(j,s)={xxis}
R 2 ( j , s ) = { x ∣ x i > s } R_2(j,s) = \{x|x_i>s\} R2(j,s)={xxi>s}

具体求解最优划分特征 j j j和最优划分点 s s s

min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( y i − c 1 ) 2 + ∑ x i ∈ R 2 ( y i − c 2 ) 2 ] \min\limits_{j,s}[\min\limits_{c_1}\sum\limits_{x_i \in R_1}(y_i - c_1)^2+ \sum\limits_{x_i \in R_2}(y_i - c_2)^2] j,smin[c1minxiR1(yic1)2+xiR2(yic2)2]

只需要求解所有特征的所有切分点,就可以找到最优切分特征和切分点,得到最终的回归树

限制CART的生长:
1- 样本个数阈值;
2- 基尼系数阈值。当达到阈值时,当前节点停止递归

2 Extreme Gradient Boosting (XGBoost)

(1)XGBoost算法思想
XGBoost是Chen 和 Guestrin 提出的一种集成学习模型,其借助了 CART 回归树的思想,并在其基础上进行了改进。算法采用Gradient Boosting的思想,每一个基学习器重点关注前一个基学习器不足的地方进行训练,串行的训练多个模型逐步逼近降低损失,最终根据样本特征将每棵树落到对应的叶子结点上,将每个叶子节点上的分数相加,即为预测值。
Boosting是串行地训练多个模型,逐步逼近降低损失

y ^ = ∑ k = 1 K f k ( x i ) \hat{y}=\sum^K_{k=1}f_k(x_i) y^=k=1Kfk(xi)

(2)XGBoost算法原理
XGBoost目标函数定义为
O b j = ∑ i = 1 n l ( y i , y i ^ ) + ∑ k = 1 K Ω ( f k ) Obj=\sum^n_{i=1}l(y_i,\hat{y_i})+\sum^K_{k=1}\Omega(f_k) Obj=i=1nl(yi,yi^)+k=1KΩ(fk)

由于XGBoost是在前k-1棵树的基础上进行预测的,因此前k-1棵树的预测结果和模型复杂度是已知的,只有第k棵树的预测值是未知的,因此,生成第k棵树之后,预测值就可以表示为

y i ^ ( t ) = y i ^ ( t − 1 ) + f t ( x i ) \hat{y_i}^{(t)}=\hat{y_i}^{(t-1)}+f_t(x_i) yi^(t)=yi^(t1)+ft(xi)

由于 ∑ 1 k − 1 Ω ( f k ) \sum_{1}^{k-1}\Omega(f_k) 1k1Ω(fk)可以视为常数省略,因此,目标函数就可以表示为

O b j = ∑ i = 1 n l ( y i , y i ^ ( t − 1 ) + f t ( x i ) ) + Ω ( f k ) Obj=\sum^n_{i=1}l(y_i,\hat{y_i}^{(t-1)}+f_t(x_i))+\Omega(f_k) Obj=i=1nl(yi,yi^(t1)+ft(xi))+Ω(fk)

利用泰勒二阶级数展开目标函数,可以得到目标函数为

O b j ≈ ∑ i = 1 n [ l ( y i , y i ^ t − 1 ) + ∂ y i ^ t − 1 l ( y i , y i ^ t − 1 ) f t ( x i ) + 1 2 ∂ y i ^ t − 1 2 l ( y i , y i ^ t − 1 ) f t 2 ( x i ) ] + Ω ( f t ) Obj \approx \sum_{i=1}^{n}[l(y_i,\hat{y_i}^{t-1})+\partial_{\hat{y_i}^{t-1}}l(y_i,\hat{y_i}^{t-1})f_t(x_i)+\frac{1}{2}\partial^{2}_{\hat{y_i}^{t-1}}l(y_i,\hat{y_i}^{t-1})f^2_t(x_i)]+\Omega(f_t) Obji=1n[l(yi,yi^t1)+yi^t1l(yi,yi^t1)ft(xi)+21yi^t12l(yi,yi^t1)ft2(xi)]+Ω(ft)

令:
g i = ∂ y i ^ t − 1 l ( y i , y i ^ t − 1 ) g_i = \partial_{\hat{y_i}^{t-1}}l(y_i,\hat{y_i}^{t-1}) gi=yi^t1l(yi,yi^t1)

h i = ∂ y i ^ t − 1 2 l ( y i , y i ^ t − 1 ) h_i=\partial^{2}_{\hat{y_i}^{t-1}}l(y_i,\hat{y_i}^{t-1}) hi=yi^t12l(yi,yi^t1)

目标函数化简为:

O b j ≈ [ g i f k ( x i ) + 1 2 h i f k 2 ( x i ) ] + Ω ( f k ) Obj \approx [g_if_k(x_i)+\frac{1}{2}h_if^2_k(x_i)]+\Omega(f_k) Obj[gifk(xi)+21hifk2(xi)]+Ω(fk)

为了将目标函数与树的结构相结合,
ω q ( x ) \omega_{q(x)} ωq(x)定义为叶子结点 q q q的分数
样本 x i x_i xi落在相应叶子结点上的预测值为 f t ( x i ) = w q ( x i ) f_t(x_i) = w_{q(x_i)} ft(xi)=wq(xi)
将第k棵树的模型复杂度与树结构相结合:

Ω ( f k ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega(f_k)=\gamma{T}+\frac{1}{2}\lambda\sum_{j=1}^{T}w^2_j Ω(fk)=γT+21λj=1Twj2

将目标函数Obj用树结构进行表示:

O b j = ∑ i = 1 n [ g i w q ( x i ) + 1 2 h i w q ( x i ) 2 ] + γ T + 1 2 λ ∑ j = 1 T w j 2 Obj=\sum_{i=1}^n[g_iw_{q(x_i)}+\frac{1}{2}h_iw_{q(x_i)}^2]+\gamma{T}+\frac{1}{2}\lambda\sum_{j=1}^Tw_j^2 Obj=i=1n[giwq(xi)+21hiwq(xi)2]+γT+21λj=1Twj2

其中,
T T T表示为叶子结点的个数, γ \gamma γ λ \lambda λ是超参数,用于控制模型复杂度

G j = ∑ i ϵ I j g j G_j=\sum_{i\epsilon I_j}g_j Gj=iϵIjgj

H j = ∑ i ϵ I j h j H_j=\sum_{i\epsilon I_j}h_j Hj=iϵIjhj

目标函数化简为:

O b j ≈ ∑ j = 1 T [ G j w i + 1 2 ( H j + λ ) w i 2 ] + γ T Obj \approx \sum_{j=1}^T[G_jw_i+\frac{1}{2}(H_j+\lambda)w_i^2]+\gamma{T} Objj=1T[Gjwi+21(Hj+λ)wi2]+γT

假设已知树的结构q,那么可以通过求解关于 ω \omega ω的一元二次函数的最小值,求出最优的 ω \omega ω及对应的最大增益,即

w j ∗ = − G J 2 × 1 2 ( H j + λ ) = − G j H j + λ w^*_j=-\frac{G_J}{2 \times\frac{1}{2} (H_j+\lambda)}=-\frac{G_j}{H_j+\lambda} wj=2×21(Hj+λ)GJ=Hj+λGj

代入目标函数,

O b j = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T Obj=-\frac{1}{2}\sum_{j=1}^T\frac{G^2_j}{H_j+\lambda}+\gamma{T} Obj=21j=1THj+λGj2+γT

采用贪心算法的思路, 对当前树中的每一个叶子节点,用不同特征尝试进行分割,并用下面的函数计算分裂前和分裂后的增益分数,找到最优的分割方案

G a i n = O b j L + R − ( O b j L + O b j R ) Gain=Obj_{L+R}-(Obj_L+Obj_R) Gain=ObjL+R(ObjL+ObjR)

= [ − 1 2 ( G L + G R ) 2 H L + H R + λ + γ T ] − [ − 1 2 ( G L 2 H L + λ + G R 2 H R + λ ) + γ ( T + 1 ) ] =[-\frac{1}{2}\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}+\gamma{T}]-[-\frac{1}{2}(\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda})+\gamma{(T+1)}] =[21HL+HR+λ(GL+GR)2+γT][21(HL+λGL2+HR+λGR2)+γ(T+1)]

= 1 2 [ G L 2 H L + λ + G R 2 H R + λ − G L + G R ) 2 H L + H R + λ ] − γ =\frac{1}{2}[\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{G_L+G_R)^2}{H_L+H_R+\lambda}]-\gamma =21[HL+λGL2+HR+λGR2HL+HR+λGL+GR)2]γ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值