集成学习

看了些周志华的教授的《机器学习》,根据自己的理解写一些笔记,温故而知新


都说3个臭皮匠顶个诸葛亮,在机器学习中也是这样。大部分情况下一个学习器的预测能力不如多个学习器的能力。多个学习器一起完成某个预测任务的过程叫做集成学习

目前集成学习的方法大致课余分成2类,一类是Boosting,一类是Bagging。前者的代表是AdaBoost算法,后者的代表是Bagging算法。

Boosting

Boosting是一种若学习器提升为强学习器的算法。这种算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,即上一下学习错误的样本在下一次学习中占得比重更大,学习错误会带来更大的惩罚。然后基于调整后的样本分布来训练下一个学习器。如此重复,直到学习器的数量达到了最大值T或者是性能达到了要求。最终将所有的学习器进行加权结合。

从偏差方差的角度来看,Boosting主要关注降低偏差,因此基于泛化性能很弱的学习器能够构建出很强的集成,不过需要注意的是在训练过程中每一轮都要检查当前生成的学习器是否满足基本条件,比如在二分类的任务中,准确率是否优于随机猜想的概率0.5,如果不满足的话,这个学习器应该被抛弃。同时可以发现,这种集成学习的方法,只能串行进行,每一轮的训练集分布都依赖一上一个学习器的训练结果。在Boosting算法中,除了AdaBoost算法,还涌现出了一系列优秀的算法,比如GBDT、LightGBM和XGBoost等

Bagging

在集成学习中,多个学习器组合在一起如果想得到泛化性能比较强的集成,则每个学习器需要尽量满足“强而不同”的特点。最好是每个学习器相互独立,相互独立在现实中很难做到,但是可以设法使得学习器具有较大的差异。比如说每个学习器只学习集中的一个子集,或者训练集中的某一部分特征,通过这样的方式来达到学习器之间的差异性。

Bagging就是这么做的。在一个包含m个样本的训练集中,先随机抽取一个样本放入采样集中,在把该样本放回初始数据集中,这样连续m次有放回采样就可以得到m个样本的采样集。可以知道初始训练集中约有63.2%的样本出现在采样集中。我们可以采样出T个采样集用于Bagging算法的训练,同时在训练过程中我们还可以指定参与训练的特征比例,来增强学习器之间的独立性。T个学习器完成训练后,再将这些学习器组合在一起。对于分类问题,采用简单投票法,对于回归问题,采用简单平均法。Bagging最经典的代表模型是随机森林。它具有结构简单、容易实现、计算开销小、可以并行训练、防止过拟合等特点。

从偏差-方差的角度来看,Bagging主要关注降低方差、防止过拟合,因此他在不剪枝决策树、神经网络等易受样本扰动的学习器上效果更明显。

组合策略

组合策略就是我们常说的模型融合,一般有这么几种方法:平均法、投票法、学习法。

比如我们对一份训练集使用5个模型训练得到了5份答案,怎么综合这5份答案生成最终的答案就称为组合策略。对于回归问题,最简单的办法就是取平均了,当然还有加权求平均等方法。对于分类问题,最简单的则是投票法,绝对多数投票法:即当某标记得票过半,则预测为该标记,否者拒绝预测;相对多数投票法:即预测为得票最多的标记,若有多个标记获得最高票数,则从中随机抽取。这种方法有点类似于Bagging。

组合策略中还有另外一种方法,叫做学习法。大体如下:几个初级学习器对原始样本进行训练,比如说5个模型,训练完成后对验证集预测,得到5份验证集的标签,然后把这5份标签作为次级学习器的x,y为验证集原始的label,进行训练。对于测试集,则首先用5个初级学习器得到5份初级输出,然后在利用训练得到的次级学习器得到最终的测试集答案。Stacking是学习法的典型代表,且有不少集成学习算法可视为其变体或者特例。

你可能感兴趣的:(集成学习)