美文网首页
boosting方法概述

boosting方法概述

作者: stigin | 来源:发表于2019-05-25 16:10 被阅读0次

    boosting方法有多种,有gbm类和adaboost类。

    1、gradient boosting

    包括gbdt、xgboost、lightGBM。boosting tree的优化不能直接用SGD,因此是累加性的训练(additive training)

    几个概念:

    残差:真实值-预测值;只有当损失函数为均方误差时,负梯度等于残差,对于更一般的损失函数来说,负梯度不等于残差。

    那么,为什么使用负梯度而不是残差?

    原因1:负梯度受异常点的影响更小!(negative gradient vs residual:http://www.ccs.neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf

    gbdt

    gbdt的基函数是CART回归树;

    前提:定义目标函数,也就是损失函数,loss = L(\tilde{y} ,F(x)),然后最小化loss;

    训练过程:

    在第i+1轮:

    1、已有多个基函数,记为f_{i}(x)  ,

    2、第i+1个基函数去拟合 loss 在F(x)的一阶导(注1)(也就是残差)(这里是SGD的思想):f_{i+1}(x)   ~lr *-\frac{\Delta loss}{\Delta F(x)}

    3、具体单颗树的拟合:CART回归树,最优分裂点的选择:使得损失函数最小;回归问题中一般是均方误差,分类问题一般使用指数损失、信息增益(熵)或gini指数作为比较标准。

    lr既是学习速率,也是每棵树的权重(除了第一棵树,第一颗的权重是1);


    xgboost

    参考:https://blog.csdn.net/u012332571/article/details/62883168

    跟gbdt区别在于:首先说明,xgboost的优化点很多,包含目标函数、基础学习器、优化算法、实现等等方面;但是各方面都跟目标函数的改写有关。

    目标函数:

    1、多了正则项,loss = L(\tilde{y} ,F(x)) + \sum_{k}\Omega (f_{k} ),其中\Omega (f_{k} )是正则项;

    2、损失函数换成对应的二阶泰勒展开式形式,优势:比gbdt的一阶导更精确,会更快收敛;(题外话,前提是损失函数二阶可导,所以神经网络就不适合加二阶导);

    3、二阶导在每棵树寻找最有分裂点时作为样本系数;

    注意泰勒展开的第一个常数项被合并了

    带权重的分位数寻找算法:weighted quantile sketch

    参考:https://www.jianshu.com/p/22b82127644a

    1、quantile分位数的含义:10分位数,即将样本按特征值从小到大排序,再找出9个分裂点,将样本平均的分成10份;分位点数量是一个超参数,可以调(类似于gbdt里面bin的设置)。

    2、带权重的:每个样本的权重为样本对应的二阶导。

    稀疏特征的处理:

    对于稀疏特征,在寻找分裂点的时候,先不考虑缺失值的样本,进行划分,然后分别将缺失值样本放在左边和放在右边,去计算目标函数的提升,从而决定缺失值样本的默认分支。

    问题:文中列举了导致稀疏的原因,有特征缺失、大量的0值、one-hot编码,个人感觉0值和one-hot编码不能这样处理,这种0值是有意义的。


    2、Adaboost 

    adaboost的核心点在于:

    1、每个样本会有不同的权重,被错误分类样本的权重会被调大,然后训练下一个基分类器;

    2、每个基分类器的权重根据其误差率进行设置,并且误差率的计算考虑了样本的权重;


    注1:梯度作为

    http://www.ccs.neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf

    相关文章

      网友评论

          本文标题:boosting方法概述

          本文链接:https://www.haomeiwen.com/subject/theizqtx.html