集成方法-Boosting

提升(Boosting)是一个迭代的过程,用来自适应地改变训练样本的分布,使得基分类聚焦在那些很难分的样本上,与Bagging不同的是,Boosting给每个训练样本赋一个权值,而且可以在每一轮提升过程结束时自动调整权值。

1、Boosting的基本思想

  • 开始时,为了使他们被选做训练集的可能性都一样,给所有的样本都赋予相同的权值1/N。
  • 根据训练样本的抽样分布来抽取样本,得到新的样本集。
  • 由抽取到的样本集合训练出一个分类器,并使用它对原始数据集中所有的样本进行分类。
  • 每一轮结束时更新训练样本的权值,增加被错误分类的样本的权重,减小被正确分类的样本的权重,从而使得分类器在随后的迭代中更加关注那些很难分类的样本。


    Boosting.png

    在Boosting的系列算法中比较著名的主要有AdaBoost算法和提升树(Boosting Tree)。提升树算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。

2、AdaBoost算法

一开始我的AdaBoost的理解存在一定的偏差,我错误的以为通过前一轮的训练增大那些预测错误的样本的权重是为了使它们再下一轮的训练中更容易被选取作为训练集。但是通过查阅相关资料和看相关代码,发现并不是我想的那样。在网上也看到跟我存在相同理解的人也有不少。
这里有几点需要说明的是:

  • 对于一个弱分类器而言,它一次值只运用某维(n维特征中的一维)的特征并选取某个阈值以及判定条件使得判断错误的样本的权值之和最小。
  • 如果某维特征在之前的弱学习器中已经使用,并不会影响之后的弱学习器再使用该维特征。只要该维特征在后面的学习器中可以使得判错的样本的权重最小即可。

3 AdaBoost迭代算法的步骤

1、初始化训练数据的权值分布:
对于有N个样本的训练集而言,每一个训练样本最开始都被赋予相同的权值:1/N
2、训练弱分类器:
具体训练过程中,如果某个样本点已经被准确的分类,那么在构造下一个训练集时,它的权值就被降低;与此相反,如果某个样本点被错误的分类,那么它的权值就得到提高。紧接着,更新过的权值的样本集被用于训练下一个学习器。
3、将各个训练得到的弱学习器组合成强学习器:
各个弱学习器的训练过程结束之后,加大分类误差率小的弱学习器的权重,使其在最终的分类函数中起较大的决定作用,降低分类错误率大的弱分类器的权重,使它们在最终的分类函数中起较小的决定作用。
预测结果分布和方差、偏差的关系.png
  • 靶心为完美预测的模型,蓝色点代表某个模型的预测结果,离靶心越远,准确率越低
  • 低Bias表示离圆心近,高Bias表示离圆心远
  • 高Variance表示学习结果分散,低Variance表示学习结果集中。

前面总结的Bagging方法能减少训练方差(Variance),对于不剪枝的决策树,神经网络学习器具有良好的集成效果,而Boosting方法能够减少偏差(Bias),能够基于泛化能力较弱的学习器构造强学习器。

参考资料:
Adaboost原理
我对adaboost的一点理解
提升算法之Adaboost

你可能感兴趣的:(集成方法-Boosting)