通过聚集多个分类器的预测来提高分类准确率的技术称为组合学习/集成学习(Ensemble Learning)。本文主要介绍相关概念,叙述几种常见集成学习模型的构造。
集成学习的种类
集成学习中构建组合分类器的方法如下:
1、 通过处理训练数据集
根据某种抽样,对原始数据进行再抽样得到多个训练集。使用特定的学习算法对每个训练集建立一个分类器。
- Bagging(基分类器通常是同一个,如决策树)
- Boosting(基分类器通常是同一个,如决策树)
2、 通过处理特征
通过选择输入特征的子集形成每个训练集,对于含有大量冗余特征的数据集,这种方法性能好。
- RandomForest(基分类器通常是同一个,如决策树)
3、 通过组合不同分类器
通过训练多个模型,学习如何把各个模型组合达到最优性能。
- Stacking(基分类器通常是多个不同的分类器)
Bagging
算法流程
Bagging(袋装)又称自助聚集,是一种根据均匀概率分布从数据集中重复抽样(有放回)的技术。每一次抽样的样本大小和原训练集大小一致,一般而言,抽样产生的数据集大约包含
通俗地讲,Bagging主要流程如下:
1. 先确定自助样本集的数目
2. 在
3. 预测时,使用投票算法,每个分类器的权重相同
Bias-Variance
机器学习问题存在偏差-方差权衡的问题,那么Bagging如何处理这个问题呢?先说答案,一般来说Bagging不能显著降低bias,但是可以降低variance。
下面主要观点来自知乎网友–过拟合:
1、 Bias
Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均。由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance(事实上,各模型的分布也近似相同,但不独立)。
这个公式的前提是模型
2、 Variance
如果各子模型
此时可以显著降低Variance。
如果各子模型
此时不会降低Variance。
那么Bagging呢,假设训练集中的
也看到一个通俗点的回答,因为基分类器相同,所以损失函数没有变化,因此模型的预测能力并没有提高,但是多模型的组合对异常点不是很敏感,降低了方差。当然还是上面数学化的语言有说服力,但是感觉还是不完整,要是有完整的偏差方差推导就好了。
Boosting
Boosting是迭代过程,每一次迭代都从训练集中抽取样本,每个样本被抽取的概率不同,且每一轮迭代概率发生改变。目的是使得上一轮被误分类的样本被抽取的概率更大。每一轮训练出一个基分类器,最终预测采用这些基分类器预测结果的加权结合。
AdaBoost
符号标记:
其中,错误率公式:
基分类器
如果错误率很小,那么权重很大,最终预测是该基分类器”话语权”重。
第
算法流程
简述下算法流程:
- Step1:以初始权值
w(1)j=1/N 抽取样本,训练第一个基分类器 - Step2:每一轮计算模型误差率,迭代样本权重,计算模型权重
- Step3:如果Step2中误差率大于0.5,回到Step1
- 直到提升次数达到设定
Bias-Variance
通俗地解释,我也没太看懂。Boosting关注错分样本,一次一次的迭代中,bias会逐渐减小,而序列化迭代的方式使得各个子模型之间强相关(为什么?)。有空了,搞一搞paper看一看吧。
Random Forests
随机森林相当于Bagging的改进版,在基分类器生成时,每次分裂节点都随机选择部分特征,选取其中最优特征进行分裂。流程如下:
分裂节点是具体如下:
当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m < M(建议分类中
OOB估计
先定义袋外数据:在进行bootstrap sample生成第
1. 对每个样本,计算它作为oob样本的树对它的分类情况
2. 等权重投票预测分类结果
3. 误分类个数/样本总数作为oob误分率
Breiman论文有证明oob误分率是随机森林泛化误差的一个无偏估计,近似于需要大量计算的
Bias-Variance
设有i.d.(同分布)的n个随机变量,方差记为
Stacking
简单讲讲stacking的构造逻辑,我自己只用caretEnsemble跑过demo,实际用过一次效果没有提高,反而下降。
假设Stacking有两层,第一层基学习器为
1. 对于训练集
2. 取出其中一份样本做测试集
3. 重复step2,
4. 对剩下的基学习器重复step2,step3,可以得到3个同样维度的label,作为第二层模型的训练数据,训练模型
5. 真正做预测时,用
存疑
各个集成学习算法在降低Bias-Variance上的作用~
后面有精力的话,希望能够就不同模型单独分析下~
Summary
简单的总结集成学习的概念,Bagging、AdaBoost、RandomForests的算法流程还算比较容易理解。我们都知道,机器学习算法的重点是Bias-Variance。如何分析各个集成学习模型中的Bias-Variance还是有点难搞,后面争取多多学习。
Ref
[1] 《The Element of Statistical Learning》
[2] 《数据挖掘导论》(PS:中文翻译有点难理解)
[3] 《机器学习》周志华
[4] http://www.cnblogs.com/jasonfreak/p/5657196.html
[5] http://www.cnblogs.com/jasonfreak/p/5720137.html
推荐[4、5]写的很清楚,图文并茂
2018-03-12 于杭州