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)=1−∑k−1Kpk2
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)=107∗0.4898+103∗0=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 xi∈Rm∑(yi−f(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)={x∣xi⩽s}
R
2
(
j
,
s
)
=
{
x
∣
x
i
>
s
}
R_2(j,s) = \{x|x_i>s\}
R2(j,s)={x∣xi>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[c1minxi∈R1∑(yi−c1)2+xi∈R2∑(yi−c2)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^(t−1)+ft(xi)
由于 ∑ 1 k − 1 Ω ( f k ) \sum_{1}^{k-1}\Omega(f_k) ∑1k−1Ω(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^(t−1)+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) Obj≈∑i=1n[l(yi,yi^t−1)+∂yi^t−1l(yi,yi^t−1)ft(xi)+21∂yi^t−12l(yi,yi^t−1)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^t−1l(yi,yi^t−1)
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^t−12l(yi,yi^t−1)
目标函数化简为:
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} Obj≈∑j=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=−21∑j=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+λGR2−HL+HR+λGL+GR)2]−γ