集成学习

元算法的思路就是:当我们做决定时,吸收多个专家而不只是一个人的意见。将不同的分类器(算法)组合起来,而这种组合结果则被称为集成方法(ensemble method)或者元算法(meta-algorithm)。机器学习代表的是一种学习的框架,框架的方法很多,有的是不同的算法的集成,有的是同一算法的在不同设置下的集成,还有可能的是数据集的不同部分分配给不同分类器之后的集成。

  

Boosting、bagging和stacking是集成学习的三种主要框架。

一种是自举汇聚法(bootstrap aggregating),也称为bagging方法,其思想是存在原始数据集,从原始数据集中选择S次得到S个新数据集 的一种技术。新的数据集的大小与原始数据集一致。每次对于原始数据集里面的样本进行替换,得到新数据集。替换的意思就是可以多次的选择同一样本。这样的话在新的数据集中就存在重复的值,然后将某个算法作用于每个数据集就可以得到S个分类器。实际运用时,对于新的特征,利用S个分类器进行分类,对于结果进行投票,找到最好的分类结果。存在更先进的bagging方法,比如随机森林(random
forest)。

一种是Boosting算法,Boosting是一族可将弱学习器提升为强学习器的算法,不同于bagging方法,boosting方法通过分步迭代(stage-wise)的方式来构建模型,在迭代的每一步构建的弱学习器都是为了弥补已有模型的不足。Boosting方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断要好。通俗地说,就是“三个臭皮匠顶个诸葛亮”的道理。Boosting族算法的著名代表是AdaBoost,AdaBoost算法通过给已有模型预测错误的样本更高的权重,使得先前的学习器做错的训练样本在后续受到更多的关注的方式来弥补已有模型的不足。

一种是stacking算法,stacking有堆砌的意思,其就是将多个分类器的结果当做一个新的分类器的输入,再依据输出训练出一个新的分类模型,空间上就是多个小的分类器和一个分类模型的堆砌叠加。stacking可以表示上面提到的两种Ensemble方法,只要我们采用合适的模型组合策略即可。但在实际中,我们通常使用logistic回归作为组合策略。


Boosting算法和Bagging算法的相同点在于使用的多个分类器的类型是一样的。不同点在于第一两者对于样本的抽取是不一致的。第二个就是前者的分类器是不断对于错误进行修正,串行训练而获得的,后者的分类器是并行产生。第三,两者的分类器的最后权重不一样,前者的权重是不断的迭代,改变。后者所有的分类器是等效的。


这个图来自于https://zhuanlan.zhihu.com/p/27689464,现在对图形的直观理解:

假若对数据的采样是多次采样,并且所有的权重C是一致的,则可以认为它为bagging算法,若没有对数据采样,直接处理,不断生成弱分类器,而且权重C不断迭代,则为boosting算法。再对他们的输出结果进行处理,如若是回归问题则一般将输出结果进行平均法或者加权法,若是分类问题,则一般是投票法或者加权法。

若对于所有弱分类器的输出作为输入,与实际输出再进行一次分类的建模,便是两个模型堆砌,也就是stacking法。