Gradient boosting

Gradient boosting

gradient boosting 是一种boosting(组合弱学习器得到强学习器)算法中的一种,可以把学习算法(logistic regression,decision tree)代入其中。

问题描述:

给定一组数据{(x,y)}i,i=1,2...,N,使用函数F(x)对数据进行拟合,使对于给定损失函数L(y,F(x))最小

(损失函数可以为$(y-F(x))^2,|y-F(x)|$[regression],$log(1+e^{-2yF})$[classification])

使用$F(x)=F_0(x)+\sum_{m=1}^{M}r_ih_m(x;\alpha_m)$(1)

     $F_0(x)=argmin_r\sum_{i=1}^N L(y_i,r)$为初始值;为常数;$r_i$为权重

     $h_m(x;\alpha_m)$是某个弱学习算法(logistic regression,decision tree),$\alpha_m$为算法的参数

算法描述:

首先选取一个常数作为F(x)的估计,最优的常数需要使损失函数最小

1.初始化$F_0(x)=argmin_r\sum_{i=1}^N L(y_i,r)$

现在已经有了$F_0(x)$作为$F(x)$的初始估计,考虑使用gredient decent方法,使损失函数减少

  A.选取方向$g_m=-\left[\frac{\partial L(y,F(x))}{\partial F(x)}\right]_{F(x)=F_{m-1}(x)}$

  B.选取方向后,选取步长,$\beta_m=argmin_{\beta}\sum_{i=1}^{N}L(y_i,F_{m-1}(x_i)+\beta g_m)$

对照(1)式,$g_m$(称为残差,residual)即为$h_m(x;\alpha_m)$;$\beta_m$即为$r_m$

2.计算$g_m$,使用$h_m(x;\alpha_m)$拟合${x,g_m}_1^N$,得到参数$\alpha_m$和$h_m(x)$的值

   计算$r_m=argmin_r\sum_{i=1}^{N}L(y_i,F_{m-1}(x_i)+rh_m(x))$

3.更新$F_m(x)=F_{m-1}(x)+r_mh_m(x)$

4.循环2,3两步,得到F_M(x)

 

输出:算法结束后,得到以下参数$(r_0,r_1,r_2,...,r_M,\alpha_1,\alpha_2,...,\alpha_M)$

当作预测时:$F(c)=r_0+\sum_{i=1}^{M}r_ih_i(c;\alpha_i)$

 

Demo(程序数据) matlab

程序中使用:

损失函数   $L(y,F(x))=\frac{1}{N}\sum_{i=1}{N}(y_i-F(x_i))^2$

弱学习算法  spline regression 参看Intro_to_splines(实际就是加了特征转换的regression)

注意:程序中的predict实现是错误的;程序没有计算步长$r_m$,而是使用常数

for i=1:nboost
    % 计算残差g_m,residual
    gradient = -2/nTrain * (f-y);
    
    % 用h_m拟合{(x,g_m)}
    submodel = boostedModel(X,gradient,options);

    % 作者实现中,对每个特征生成一个spline regression,下列代码选出表现最好的特征
    diff = (submodel - Y).^2;
    err = sum(diff,1)/nTrain;
    best(i) = find( err == min(err));
    f_i = submodel(:,best(i));
    % 如果需要预测,需要保存 spline regression 的两个参数,
    % 特征i和参数alpha(regression每个特征上的权重)
    %
    % 以及训练spline regression时用的knote及Degree参数

    % 没有计算步长(权重),直接使用常数,1-500次循环时,v=0.9
    if i>500
        v = 0.5;
    end
    %更新F_m(x)
    f = f + v*f_i;
    
    if mod(i,100) == 0
        n = n+1;
        error(n) = 1/nTrain * sum((y - f).^2);
    end

end

 

posted @ 2015-03-24 17:15  porco  阅读(513)  评论(0编辑  收藏  举报