集成学习(bagging/boosting/stacking)

本文介绍了集成学习中的Bagging、Boosting、Stacking等方法,对比了Bagging与Boosting的不同之处,包括样本选择方式、样本权重调整、预测函数权重等方面,并解释了它们如何分别减少方差和偏差。

集成学习

多个基分类器组合成一个总分类器,能够达到单个基分类器所达不到的效果。根据将多个基分类器集成在一起的方式

用于减少方差的bagging
用于减少偏差的boosting
用于提升预测结果的stacking
Blending:用不相交的数据训练不同的 Base Model,将它们的输出取(加权)平均。实现简单,但对训练数据利用少了。

串行集成方法,这种方法串行地生成基础模型(如AdaBoost)。串行集成的基本动机是利用基础模型之间的依赖。通过给错分样本一个较大的权重来提升性能。
并行集成方法,这种方法并行地生成基础模型(如Random Forest)。并行集成的基本动机是利用基础模型的独立性,因为通过平均能够较大地降低误差。

一些名词的区分:
Bootstraping:进行区间估计
boost/bagging:集成学习的方法

Bagging(套袋法)

(Bootstrap Aggregating的缩写,适合小样本和不知样本分布的情况,目的是减少方差):

从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)

对于分类问题:由投票表决产生分类结果;
对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)
在这里插入图片描述

Boosting(提升法)

(目的是减小偏差)
boosting是一种集成技术,试图从多个弱分类器中创建强分类器。

算法过程如下: 对于训练集中的每个样本建立权值wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值。

进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型。(例如AdaBoost给每个弱分类器一个权值,将其线性组合最为最终分类器。误差越小的弱分类器,权值越大)
在这里插入图片描述

AdaBoost(Adaptive Boosting自适应增强):
前一个基本分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。同时,在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数才确定最终的强分类器。

Bagging和Boosting的区别:

样本选择上:
Bagging采用的是Bootstrap随机有放回抽样;
而Boosting每一轮的训练集是不变的,改变的只是每一个样本的权重。

样本权重
Bagging使用的是均匀取样,每个样本权重相等;
Boosting根据错误率调整样本权重,错误率越大的样本权重越大。

预测函数
Bagging所有的预测函数的权重相等;
Boosting中误差越小的预测函数其权重越大。

并行计算
Bagging各个预测函数可以并行生成;
Boosting各个预测函数必须按顺序迭代生成。

目的不同
Bagging减少Variance(随机选样本,随机选特征;而弱分类器们优化的目标一致,所以bias差不多的),
Boosting减少Bias(迭代修正模型一步一步逼近真实值。如果迭代次数足够多,可以产生更好的预测结果,也就是减少了偏差。同时由于boosting中的基分类器是强相关的,总是利用残差(实际值与预测值的差)来进行计算,所以不能显著的降低variance)

异常点敏感度
boosting不断地迭代更新能使得最终的结果无限接近最优分类,不过boosting会倾向于一直分错的样本,如果样本中有离群的错误样本,boosting就会出现效果不好的情况。

为什么说bagging是减少variance,而boosting是减少bias?

Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均。由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance,所以bagging后的bias和单个子模型的接近,一般来说不能显著降低bias。另一方面,若各子模型独立,此时可以显著降低variance。若各子模型完全相同,此时不会降低variance。bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。为了进一步降低variance,Random
forest通过随机选取变量子集做拟合的方式de-correlated了各子模型(树),使得variance进一步降低。

boosting从优化角度来看,是用forward-stagewise这种贪心法去最小化损失函数,boosting是在sequential地最小化损失函数,其bias自然逐步下降。但由于是采取这种sequential、adaptive的策略,各子模型之间是强相关的,于是子模型之和并不能显著降低variance。所以说boosting主要还是靠降低bias来提升预测精度。

举个例子 gbdt是boosting的方式,它的决策树的深度比较小,模型会欠拟合,刚开始偏差大,后来就慢慢变小了。

stacking

Stacking是通过一个元分类器或者元回归器来整合多个分类模型或回归模型的集成学习技术。基础模型利用整个训练集做训练,元模型将基础模型的特征作为特征进行训练。
基础模型通常包含不同的学习算法,因此stacking通常是异质集成。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

偏差与方差

偏差与方差 从集成学习到模型的偏差和方差的理解
避免偏差的话,首先我们需要尽量选择正确的模型,我们要根据数据的分布和特点,选择合适的算法。
其次,数据集的大小,模型的复杂度

关于模型选择的方法,有正则化的方法和K折交叉验证的方法。
正则化通过为目标优化函数加上一个正则化因子,避免模型的复杂度太高。
交叉验证的时候,模型的类型已经定了,我们需要确定模型的参数,所以影响方差偏差的因素只剩下来自数据的影响。有一个相对比较偏的理解:
当K值大的时候, 我们会有更少的Bias(偏差), 更多的Variance。 当K值小的时候,我们会有更多的Bias(偏差),更少的Variance。

模型收到低偏差和高方差问题的困扰,应该如何解决
泛化能力弱,过拟合
我们可以使用bagging算法(如随机森林),以解决高方差问题
bagging算法采用bootstrapping抽样策略,把数据集分成重复随机取样形成的子集。然后,这些样本利用单个学习算法生成一组模型。接着,利用投票(分类)或平均(回归)把模型预测结合在一起。
另外,为了应对高方差问题,还可以做一些其他的操作
1、加入正则惩罚。
2、对树进行剪枝
3、使用可变重要性图表中的前n个特征。
其实防止过拟合的small trick还有许多,主要可以从数据集与模型两个角度出发。今后会作总结。

为什么把特征组合之后还能提升
反正这些基本都是增强了特征的表达能力,或者说更容易线性可分吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值