集成学习及Stacking

最近在学习stacking,于是写一个记录记载一下对集成学习的理解,当然此篇仅为个人记录所用,如果有什么错漏之处,仅各位提出。整个集成学习的框架来源于周志华教授的机器学习一书。只是对集成学习做个总结。

集成学习就是通过多种学习算法构建多个分类器,并通过一定的策略将多个分类器结合以获得最终的结果。

通常情况下,集成学习会比单一分类器的学习效果好。主要针对的还是对弱分类器进行结合,当然对于强分类器也行,只是可能泛化性能不如针对弱分类器的。

集成学习方法有两种,1.个体学习器之间存在强依赖关系,需要串联个体学习器。2.个体学习器不存在强依赖关系,可以同时生成的并联方式。第一种的学习方式的代表为Boosting,第二种的代表有Bagging和随机森林(Random Forest)。

这两种方式都是个体分类器之间连接的方式,当分类器以及个体分类器之间的方式构建完成之后,选用相应的结合策略对多个分类器的结果进行结合,获取最终的分类结果。结合策略有平均法(简单平均法,加权平均法),投票法(绝对多数投票法,相对多数投票法,加权投票法),学习法(stacking,平均贝叶斯模型BMA)。

构建分类器的方式:

1. Boosting

Boosting是一族将弱分类器提升为强分类器的算法,AdaBoost是其中最有代表性的算法。其基本思想是如下:


2. Bagging

Bagging是一种并行式的集成学习代表,它对于样本的分类策略:对有m个样本的数据集,每次有放回的取出1个样本,共m次,这样可以得到一个m个样本的采样集。重复T次,得到T个含有m个样本的采样集。对这T个采样集可以采用不同的学习方式进行训练。

3. 随机森林RF

以决策树为基学习器构建Bagging集成的基础上,在决策层树的训练过程中引入随机属性选择。(这一段式树上的内容,还没有实际操作过决策树,不是很清楚)

结合策略:

1. 平均法

简单平均:对各个学习器的结果取平均

加权平均;对各个学习器的结果加个权重再平均

2. 投票法

绝对多数投票:若某标记的投票超过半数,则该标记为预测结果,否则没有结果,拒绝预测。

相对多数投票:取得票最多的结果为预测结果。

加权投票:对各个学习器的结果乘以权重后的结果再进行投票。

3. 学习法

对基学习器的训练结果再用一个学习器进行训练。那些基学习器也是初级学习器,用以训练基学习器的结果的学习器为次级学习器或元学习器。

Stacking:这也是想总结的一个算法,网上也有一些教程,讲的都很明白。

通常的方法是通过K折交叉验证构建初级学习器生成一个新的数据集。


这是网上的流传甚广的一张讲解Stacking的图,改了一点点。初级学习器是用一种算法训练的model1。对训练集进行5折交叉,训练5个model,每个model都会一个产生一个预测值,将5组预测值纵向拼接再一起,构成次级学习器的训练数据,记为F1。

可以用多种学习方式构建初级学习器,得到F2,F3…..将n个F横向拼接得到最终的次级学习器的训练数据。

比如,用SVM方法对1000个训练样本进行训练,该模型的输出为1,分5折,每折200个,每折会得到200个预测结果,5次1000个,且这1000个预测结果的样本数据就是原有的1000个样本,对训练数据有了全覆盖。

那么SVM模型的结果数据即为1000X1.

用神经网络或者其他学习方式通过同那样的策略也会得到1000X1。

通过n种算法会得到1000 X n 的结果,即为次级学习器的训练数据。

常用的次级学习器的算法是多响应线性回归。

在这里,初级学习器的构建是并行的。即每一折数据同时用多种算法训练,以保证多个初级学习器得到的结果序列的一致。

次级训练器的预测数据处理同样要通过五折得到的model取平均值,再以与上述次级训练数据拼接的相同顺序进行拼接,作为预测数据。

这里附一个用Stacking做文本情感分类的例子。感谢我的师弟。

JuliusZhu1993/TXTEmotion

发布于 2018-08-26 19:36