1、集成学习法html
在机器学习的有监督学习算法中,咱们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际状况每每不这么理想,有时咱们只能获得多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。集成学习就是组合这里的多个弱监督模型以期获得一个更好更全面的强监督模型,集成学习潜在的思想是即使某一个弱分类器获得了错误的预测,其余的弱分类器也能够将错误纠正回来。算法
集成方法是将几种机器学习技术组合成一个预测模型的元算法,以达到减少方差(bagging)、误差(boosting)或改进预测(stacking)的效果。bootstrap
集成学习在各个规模的数据集上都有很好的策略。api
数据集大:划分红多个小数据集,学习多个模型进行组合app
数据集小:利用Bootstrap方法进行抽样,获得多个数据集,分别训练多个模型再进行组合框架
集合方法可分为两类:dom
总结一下,集成学习法的特色:机器学习
① 将多个分类方法汇集在一块儿,以提升分类的准确率。ide
(这些算法能够是不一样的算法,也能够是相同的算法。)函数
② 集成学习法由训练数据构建一组基分类器,而后经过对每一个基分类器的预测进行投票来进行分类
③ 严格来讲,集成学习并不算是一种分类器,而是一种分类器结合的方法。
④ 一般一个集成分类器的分类性能会好于单个分类器
⑤ 若是把单个分类器比做一个决策者的话,集成学习的方法就至关于多个决策者共同进行一项决策。
天然地,就产生两个问题:
1)怎么训练每一个算法?
2)怎么融合每一个算法?
这篇博客介绍一下集成学习的几个方法:Bagging,Boosting以及Stacking。
一、Bagging(bootstrap aggregating,装袋)
Bagging即套袋法,先说一下bootstrap,bootstrap也称为自助法,它是一种有放回的抽样方法,目的为了获得统计量的分布以及置信区间,其算法过程以下:
A)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被屡次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,获得k个训练集。(k个训练集之间是相互独立的)
B)每次使用一个训练集获得一个模型,k个训练集共获得k个模型。(注:这里并无具体的分类算法或回归方法,咱们能够根据具体问题采用不一样的分类或回归方法,如决策树、感知器等)
C)对分类问题:将上步获得的k个模型采用投票的方式获得分类结果;对回归问题,计算上述模型的均值做为最后的结果。(全部模型的重要性相同)
为了让更好地理解bagging方法,这里提供一个例子。
X 表示一维属性,Y 表示类标号(1或-1)测试条件:当x<=k时,y=?;当x>k时,y=?;k为最佳分裂点
下表为属性x对应的惟一正确的y类别
如今进行5轮随机抽样,结果以下
每一轮随机抽样后,都生成一个分类器
而后再将五轮分类融合
对比符号和实际类,咱们能够发现:在该例子中,Bagging使得准确率可达90%
由此,总结一下bagging方法:
① Bagging经过下降基分类器的方差,改善了泛化偏差
② 其性能依赖于基分类器的稳定性;若是基分类器不稳定,bagging有助于下降训练数据的随机波动致使的偏差;若是稳定,则集成分类器的偏差主要由基分类器的偏倚引发
③ 因为每一个样本被选中的几率相同,所以bagging并不侧重于训练数据集中的任何特定实例
经常使用的集成算法类是随机森林。
在随机森林中,集成中的每棵树都是由从训练集中抽取的样本(即 bootstrap 样本)构建的。另外,与使用全部特征不一样,这里随机选择特征子集,从而进一步达到对树的随机化目的。
所以,随机森林产生的误差略有增长,可是因为对相关性较小的树计算平均值,估计方差减少了,致使模型的总体效果更好。
二、Boosting
其主要思想是将弱分类器组装成一个强分类器。在PAC(probably approximately correct,几率近似正确)学习框架下,则必定能够将弱分类器组装成一个强分类器。
关于Boosting的两个核心问题:
1)在每一轮如何改变训练数据的权值或几率分布?
经过提升那些在前一轮被弱分类器分错样例的权值,减少前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。
2)经过什么方式来组合弱分类器?
经过加法模型将弱分类器进行线性组合,好比:
AdaBoost(Adaptive boosting)算法:刚开始训练时对每个训练例赋相等的权重,而后用该算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习之后更注意学错的样本,从而获得多个预测函数。经过拟合残差的方式逐步减少残差,将每一步生成的模型叠加获得最终模型。
GBDT(Gradient Boost Decision Tree),每一次的计算是为了减小上一次的残差,GBDT在残差减小(负梯度)的方向上创建一个新的模型。
三、Stacking
Stacking方法是指训练一个模型用于组合其余各个模型。首先咱们先训练多个不一样的模型,而后把以前训练的各个模型的输出为输入来训练一个模型,以获得一个最终的输出。理论上,Stacking能够表示上面提到的两种Ensemble方法,只要咱们采用合适的模型组合策略便可。但在实际中,咱们一般使用logistic回归做为组合策略。
以下图,先在整个训练数据集上经过bootstrap抽样获得各个训练集合,获得一系列分类模型,而后将输出用于训练第二层分类器。
2、Bagging,Boosting两者之间的区别
一、Bagging和Boosting的区别:
1)样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每一个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2)样例权重:
Bagging:使用均匀取样,每一个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3)预测函数:
Bagging:全部预测函数的权重相等。
Boosting:每一个弱分类器都有相应的权重,对于分类偏差小的分类器会有更大的权重。
4)并行计算:
Bagging:各个预测函数能够并行生成
Boosting:各个预测函数只能顺序生成,由于后一个模型参数须要前一轮模型的结果。
二、决策树与这些算法框架进行结合所获得的新的算法:
1)Bagging + 决策树 = 随机森林
2)AdaBoost + 决策树 = 提高树
3)Gradient Boosting + 决策树 = GBDT
参考博文:
【1】集成学习总结 & Stacking方法详解 https://blog.csdn.net/willduan1/article/details/73618677
【2】Bagging和Boosting 概念及区别 https://www.cnblogs.com/liuwu265/p/4690486.html
【3】集成学习法之bagging方法和boosting方法 https://blog.csdn.net/qq_30189255/article/details/51532442
【4】机器学习中的集成学习(Ensemble Learning) http://baijiahao.baidu.com/s?id=1590266955499942419&wfr=spider&for=pc
【5】简单易学的机器学习算法——集成方法(Ensemble Method) https://blog.csdn.net/google19890102/article/details/46507387