集成学习,将多个独立分类器(此处称为基学习器)组合在一起,共同完成任务。如bagging(减小方差)、boosting(偏差)或stacking(改进预测)
其中Boosting,主要算法有AdaBoost/GBDT/Xgboost/LightGBM
关于Boosting的两个核心问题:
1)在每一轮如何改变训练数据的权值或概率分布?
通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。
2)通过什么方式来组合弱分类器?
通过加法模型将弱分类器进行线性组合,比如:
AdaBoost(Adaptive boosting)算法:刚开始训练时对每一个训练样本赋相等的权重,然后用该算法对训练集训练t轮,每次训练后,对训练失败的训练样本赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。将每一步生成的模型叠加得到最终模型。
GBDT(Gradient Boost Decision Tree),通过拟合残差的方式逐步减小残差,每一次的计算是为了减少上一次的残差,GBDT在残差减少(负梯度)的方向上建立一个新的模型。
AdaBoost算法被成为十大算法之一主要基于以下几点:
1、通过数学公式可以推导出该算法的在理论层面可以无限趋近于0
2、AdaBoost算法中,最后对每个树模型进行叠加的时候其权重是通过计算得到,无需自己设置
以上两点的证明如下:(公式输入太麻烦,所以就直接手写了)
只要是boosting大家族的算法,都要解决4个问题
1、如何计算学习误差率e? 【伪代码中第 4 行】
2、如何得到弱学习器权重系数α? 【需要推导,详见图一权重系数α推导部分,即公式3的推导】
3、如何更新样本权重D? 【伪代码中第 7 行】
4、使用何种结合策略? 【伪代码中最后一行,Output部分,即通过加权结合】
附上AdaBoost算法伪代码:(图片来自网络)