GBDT和Xgboost算法

1.提升的概念
   提升是一个机器学习技术,可以用于分类和回归的问题,它每一步产生一个若预测模型(如决策树),并加权累加到总模型中;如果每一步的弱预测模型都是生成都是依据损失函数的梯度方向,称之为梯度提升。
   梯度提升算法首先给定一个目标损失函数,他的定义域是所有可行的弱函数集合(基函数);提升算法通过迭代的选择一个负梯度方向上的基函数逐渐逼近极小值,这种函数域的梯度提升观点对机器学习的很多领域有深刻影响。如果一个问题存在弱分类器,则一定可以通过提升的方法得到强分类器。
2.提升算法
   给定输入向量x和输出变量y组成的若干训练样本 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x n , y n ) (x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n) (x1,y1),(x2,y2),,(xn,yn),目标是找到近似函数 F ^ ( x ⃗ ) \hat{F}(\vec{x}) F^(x ),使得损失函数 L ( y , F ( x ) ) L(y,F(\mathbf x)) L(y,F(x))的损失值最小
   损失函数 L ( y , F ( x ) ) L(y,F(\mathbf x)) L(y,F(x))的典型定义为
L ( y , F ( x ⃗ ) ) = 1 2 ( y − F ( x ⃗ ) ) 2 L ( y , F ( x ⃗ ) ) = ∣ y − F ( x ⃗ ) ∣ \begin{aligned} L(y,F(\vec{x}))=&\frac{1}{2}(y-F(\vec{x}))^2 \\ L(y,F(\vec{x}))=&|y-F(\vec{x})|\\ \end{aligned} L(y,F(x ))=L(y,F(x ))=21(yF(x ))2yF(x )
   假定最右函数为 F ∗ ( x ⃗ ) F^*(\vec{x}) F(x ),即:
F ∗ ( x ⃗ ) = a r g   m i n E ( x , y ) [ L ( y , F ( x ⃗ ) ) ] F^*(\vec{x})=arg\,min E_{(x,y)}[L(y,F(\vec{x}))] F(x )=argminE(x,y)[L(y,F(x ))]
   假定 F ( x ) F(\mathbf x) F(x)是一族基函数 f i ( x ) f_i(\mathbf x) fi(x)的加权和
F ( x ⃗ ) = ∑ i = 1 M γ i f i ( x ) + c o n s t F(\vec{x})=\sum_{i=1}^{M}\gamma_if_i(x)+const F(x )=i=1Mγifi(x)+const
3.提升算法推导
   梯度提升方法寻找最优解 F ( x ) F(x) F(x),使得损失函数再训练集上的期望最小。方法如下:
   首先,给定常函数 F 0 ( x ) F_0(x) F0(x):
F 0 ( x ⃗ ) = a r g   m i n ∑ i = 1 n L ( y i , γ ) F_0(\vec{x})=arg\,min\sum_{i=1}^{n}L(y_i,\gamma) F0(x )=argmini=1nL(yi,γ)
   以贪心的思路扩展得到 F m ( x ) F_m(x) Fm(x):
F m ( x ⃗ ) = F m − 1 ( x ⃗ ) + a r g   m i n f ∈ H ∑ i n L ( y i , F m − 1 ( x i ⃗ ) + f ( x i ⃗ ) ) F_m(\vec{x})=F_{m-1}(\vec{x})+arg\,\mathop{min}\limits_{f\in H} \sum_i^{n}L(y_i,F_{m-1}(\vec{x_i})+f(\vec{x_i})) Fm(x )=Fm1(x )+argfHmininL(yi,Fm1(xi )+f(xi ))
   贪心法在每次选择最优基函数时仍困难,使用梯度下降方法进行近似计算,将样本带入基函数 f f f得到 f ( x 1 ⃗ ) , f ( x 2 ⃗ ) , ⋯   , f ( x n ⃗ ) f(\vec{x_1}),f(\vec{x_2}),\cdots,f(\vec{x_n}) f(x1 ),f(x2 ),,f(xn ),从而L退化为向量 L ( y 1 , f ( x 1 ⃗ ) ) , L ( y 2 , f ( x 2 ⃗ ) ) , ⋯   , L ( y n , f ( x n ⃗ ) ) L(y_1,f(\vec{x_1})),L(y_2,f(\vec{x_2})),\cdots,L(y_n,f(\vec{x_n})) L(y1,f(x1 )),L(y2,f(x2 )),,L(yn,f(xn ))
F m ( x ⃗ ) = F m − 1 ( x ⃗ ) − γ m ∑ i = 1 n ∇ f L ( y i , F m − 1 ( x ⃗ ) ) F_m(\vec{x})=F_{m-1}(\vec{x})-\gamma_m\sum_{i=1}^{n}\nabla_fL(y_i,F_{m-1}(\vec{x})) Fm(x )=Fm1(x )γmi=1nfL(yi,Fm1(x ))
   上式中权值 γ \gamma γ为梯度下降的步长,使用线性搜索求最优步长:
γ m = a r g   m i n γ ∑ i = 1 n L ( y i , F m ( x ⃗ ) − γ ⋅ ∇ f L ( y i , F m − 1 ( x ⃗ ) ) ) \gamma_m=arg\,\mathop{min}\limits_{\gamma}\sum_{i=1}^{n}L(y_i,F_m(\vec{x})-\gamma \cdot \nabla_fL(y_i,F_{m-1}(\vec{x}))) γm=argγmini=1nL(yi,Fm(x )γfL(yi,Fm1(x )))
4.提升算法
   初始给定模型为常数 F 0 ( x ⃗ ) = a r g   m i n γ ∑ i = 1 n L ( y i , γ ) F_0(\vec{x})=arg\,\mathop{min}\limits_{\gamma}\sum_{i=1}^{n}L(y_i,\gamma) F0(x )=argγmini=1nL(yi,γ)
   对于m=1到M
     计算伪残差 γ i m = [ ∂ L ( y i , F ( x ⃗ i ) ) ∂ F ( x ⃗ i ) ] F ( x ⃗ ) = F m ( x ⃗ )   i = 1 , 2 , ⋯   , n \gamma_{im}=[\frac{\partial L(y_i,F(\vec{x}_i))}{\partial{F(\vec{x}_i)}}]_{F(\vec{x})=F_m(\vec{x})}\, i=1,2,\cdots,n γim=[F(x i)L(yi,F(x i))]F(x )=Fm(x )i=1,2,,n
     使用数据计算 { ( x i ⃗ , γ i m ) } i n \left\{ (\vec{x_i},\gamma_{im}) \right\}_i^n {(xi ,γim)}in的拟合残差基函数 f m ( x ⃗ ) f_m(\vec{x}) fm(x )
     计算步长 γ m = a r g   m i n γ ∑ i = 1 n L ( y i , F m − 1 ( x ⃗ ) − γ ⋅ F m ( x ⃗ ) ) ) \gamma_m=arg\,\mathop{min}\limits_{\gamma}\sum_{i=1}^{n}L(y_i,F_{m-1}(\vec{x})-\gamma \cdot F_{m}(\vec{x}))) γm=argγmini=1nL(yi,Fm1(x )γFm(x )))
     更新模型 F m ( x ⃗ ) = F m − 1 ( x ⃗ ) − γ m ⋅ f m ( x ⃗ ) F_m(\vec{x})=F_{m-1}(\vec{x})-\gamma_m\cdot f_m(\vec{x}) Fm(x )=Fm1(x )γmfm(x )
   梯度提升的典型基函数即决策树(尤其是CART)
5.提升算法总结
   函数估计被认为是在函数空间而非参数空间的数值优化问题,而阶段性的加性扩展和梯度下降手段将函数估计转化为参数估计。
   损失函数为最小均方误差和绝对值误差等,则为回归问题;而误差函数为多类别Logistic似然函数,则为分类问题。
   对目标函数分解为若干基函数的加权和,是常见的技术手段,神经网络、径向基函数、傅立叶/小波变换、SVM都能看见它的影子。
6.XGBoost算法
   (1)目标函数: J ( f t ) = ∑ i = 1 n L ( y i , y i ^ ( t − 1 ) + f t ( x ⃗ ) ) + Ω ( f t ) + C J(f_t)=\sum_{i=1}^{n}L(y_i,\hat{y_i}^{(t-1)}\small +f_t(\vec{x}))+\Omega (f_t)+C J(ft)=i=1nL(yi,yi^(t1)+ft(x ))+Ω(ft)+C
    根据泰勒展开式:
f ( x + Δ x ) ≈ f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 f(x+\Delta x)\approx f(x)+f'(x)\Delta x+\frac{1}{2} f''(x)\Delta x^2 f(x+Δx)f(x)+f(x)Δx+21f(x)Δx2
    令:
g i = ∂ L ( y i , y ^ i ( t − 1 ) ) ∂ y ^ i ( t − 1 ) , h i = ∂ 2 L ( y i , y ^ i ( t − 1 ) ) ∂ y ^ i ( t − 1 ) g_{i}=\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-1)}} gi=y^i(t1)L(yi,y^i(t1)),hi=y^i(t1)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
   (2)决策树的描述
    使用决策树对样本做分类(回归),是从根节点到叶子节点的细化过程;落在相同节点的样本的预测值是相同的;
    假定某决策树的叶子节点数目为T,每个叶子节点的权值为 w ⃗ = ( w 1 , w 2 ⋯ w T ) \vec{w}=\left(w_{1}, w_{2} \cdots w_{T}\right) w =(w1,w2wT),决策树的学习过程,就是构造如何使用特征得到划分,从而得到这些权值的过程;
    样本x落在叶子节点q中,定义为: f t ( x ) = w q ( x ) f_{t}(x)=w_{q(x)} ft(x)=wq(x),一个决策树的核心即"树结构"和”叶权值“。
    举例:是否喜欢计算机游戏的例子
在这里插入图片描述   (3)正则项的定义
    决策树的复杂度可以考虑叶节点数和叶权值,如使用叶节点总数和叶权值平方和的加权。
Ω ( f t ) = γ ⋅ T t + λ ⋅ 1 2 ∑ j = 1 T w j 2    \Omega\left(f_{t}\right)=\gamma \cdot T_{t}+\lambda \cdot \frac{1}{2} \sum_{j=1}^{T} w_{j}^{2}\,\, Ω(ft)=γTt+λ21j=1Twj2
在这里插入图片描述
   (4)目标函数计算
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 = ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) + C = ∑ 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 + C = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i = I j h i ) w j 2 ] + γ ⋅ T + λ ⋅ 1 2 ∑ j = 1 T w j 2 + C = ∑ j = 1 T [ ( ∑ i = I j g i ) w j + 1 2 ( ∑ i = I j h i + λ ) w j 2 ] + γ ⋅ T + C \begin{aligned} 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 \\ &=\sum_{i=1}^{n}\left[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 \\ &=\sum_{i=1}^{n}\left[g_{i} w_{q\left(x_{i}\right)}+\frac{1}{2} h_{i} w_{q\left(x_{i}\right)}^{2}\right]+\gamma \cdot T+\lambda \cdot \frac{1}{2} \sum_{j=1}^{T} w_{j}^{2}+C \\ &=\sum_{j=1}^{T}\left[\left(\sum_{i \in I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i=I_{j}} h_{i}\right) w_{j}^{2}\right]+\gamma \cdot T+\lambda \cdot \frac{1}{2} \sum_{j=1}^{T} w_{j}^{2}+C \\ &=\sum_{j=1}^{T}\left[\left(\sum_{i=I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i=I_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma \cdot T+C \end{aligned} J(ft)i=1n[L(yi,y^i(t1))+gift(xi)+21hift2(xi)]+Ω(ft)+C=i=1n[gift(xi)+21hift2(xi)]+Ω(ft)+C=i=1n[giwq(xi)+21hiwq(xi)2]+γT+λ21j=1Twj2+C=j=1TiIjgiwj+21i=Ijhiwj2+γT+λ21j=1Twj2+C=j=1Ti=Ijgiwj+21i=Ijhi+λwj2+γT+C
   (5)目标函数继续简化
    对于: 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 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 J(ft)=j=1T[(iIjgi)wj+21(iIjhi+λ)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}, \quad 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 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
    举例:
在这里插入图片描述
      构造决策树的结构
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
      枚举可行的分割点,选择增益最大的划分,继续同样的操作,直到满足某阈值或得到纯节点。
Gain ⁡ ( ϕ ) = 1 2 [ G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ ] − γ \operatorname{Gain}(\phi)=\frac{1}{2}\left[\frac{G_{L}^{2}}{H_{L}+\lambda}+\frac{G_{R}^{2}}{H_{R}+\lambda}-\frac{\left(G_{L}+G_{R}\right)^{2}}{H_{L}+H_{R}+\lambda}\right]-\gamma Gain(ϕ)=21[HL+λGL2+HR+λGR2HL+HR+λ(GL+GR)2]γ
在这里插入图片描述
   (6)相对于传统的GBDT,XGBoost使用了二阶信息,可以更快的在训练集上收敛,XGBoost的实现中使用了并行/多核计算,因此训练速度更快,同时它的原生语言是C/C++,这是它速度快的实践原因。
7.Adaboost算法
   (1)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
     对于 m = 1 , 2 , … M \mathrm{m}=1,2, \ldots \mathrm{M} m=1,2,M
         使用具有权值分布 D m D_m Dm的训练数据集学习,得到基本分类器 G m ( x ) : χ → { − 1 , + 1 } G_{m}(x): \quad \chi \rightarrow\{-1,+1\} Gm(x):χ{1,+1}
        计算 G m ( x ) G_m(x) 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)
        计算 G m ( x ) G_m(x) 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
        这里, Z m Z_m 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))
        构建基本分类器的线性组合
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))
   (2)Adaboost举例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
   (3)Adaboost算法解释:
     Adaboost算法是模型为加法模型,损失函数为指数函数,学习算法为前向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值