集成学习(Ensemble)

集成学习(Ensemble)

目前的集成学习方法分为两类:
1.个体学习器间存在强依赖关系、必须串行生成的序列化方法。 Boosting
2.个体学习器间不存在强依赖关系、可以同时生成的并行化方法。 Bagging RandomForest

  • Boosting算法包括AdaBoost、GBDT、XGBoost
  • Bagging算法包括 RandomForest

AdaBoost

Boosting算法是一种将弱学习器提升为一种强学习器的算法。
工作机制:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本的分布进行调整,使得先前的基学习器做错的训练样本在后续收到更多关注,然后基于调整后的样本分布来训练下一个基学习器。如此重复进行,直至基学习器的数目达到之前设置的指定值T,最终将这T个基学习器进行加权结合。

大多数的提升方法都改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
针对Boosting算法有两个问题:一是如何改变训练数据的权值和概率分布;二是如何将弱分类器组合成一个强分类器。
针对第一个问题:AdaBoost的做法是提高那些被前一轮弱分类器错误分类的样本的权重,而降低那些被正确分类的样本权重。这样,没有被分类正确的样本在下一轮训练弱分类器得到更大关注。分类问题被一系列弱分类器分而治之。
针对第二个问题:弱分类器是如何组合的,AdaBoost采取的是加权多数表决的方法。加大分类误差率小的弱分类器的权重,使其在表取中其较大的作用,减小分类误差率大的弱分类器的权重,使其在表取中起较小的作用。

AdaBoost算法可以认为是模型为加法模型,损失函数为指数函数、学习算法为前向分布算法的二分类学习方法。采用这种方法来解释AdaBoost算法。提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。

提升树(BoostingTree)
提升树是以分类树或回归树为基本分类器的提升方法。对分类问题决策树是二叉分类树,对回归问题的决策树是二叉回归树。
树的线性组合能够很好的拟合训练数据,即使数据中的输入输出之间的关系很复杂。
针对不同问题的提升树学习算法,主要的区别在于使用不同的损失函数,针对回归问题,使用平方误差损失函数,针对分类问题,使用指数损失函数,使用一般损失函数的一般决策问题。
对于二分类问题,提升树只需要将AdaBoost算法中的基本分类器限制为二分类树(决策树)就可以。这时的提升树只是AdaBoost的特殊情况。
对于回归问题的提升树算法,采用回归树,采用平方误差为损失函数时,只需要简单拟合当前模型的残差。

梯度提升树(GradientBoostingDecision Tree)
提升树利用加法模型与前向分布算法实现的优化过程,当损失函数是平方损失和指数损失函数时,每一步的优化是很简单的,但是对于一般的损失函数而言,往往每一步的优化并不容易。因此,使用梯度提升算法,利用最下降的近似方法,关键是利用损失函数的负梯度代表当前模型的值,用该值来作为回归提升树的残差近似值。(用该负梯度值更具有通用性,代替了上面的残差值。)
从偏差-方差的角度看,Boosting主要关注降低偏差,因此Boosting能够基于泛化性能相当弱的学习器构建出很强的集成。

Bagging与Random Forest(随机森林)
欲得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立;设法使基学习器尽可能产生较大的差异。给定一个训练数据集,对训练样本进行采样,产生若干不同的子集,从每个数据子集中训练出一个基学习器。这样由于训练数据样本不同,获得的基学习器可能具有较大差异。同时为了获得较好的集成,个体学习器不能太差。如果采样出的每个子集都完全不同,则每个基学习器都只用到了一小部分训练数据,甚至不足以进行有效学习,这显然无法确保产生较好的基学习器。考虑使用有相互有交叠的采样子集。
Bagging是并行式集成学习方法的著名代表,是基于自助采样法(bootstrapsampling),有放回采样。
采样出T个含m个训练样本的采样集,之后针对每个采样集训练出一个基学习器,再将这些基学习器进行组合。在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。
假定基学习器的计算复杂度为O(m),则Bagging的复杂度为T*(O(m)+O(s)),考虑到采样与投票/平均过程的复杂度O(s)很小,而T通常是一个不太大的常树。因此训练一个Bagging集成与直接使用基学习算法训练一个学习器的复杂度同阶。这说明Bagging是一个很高效的集成学习算法。另外,与标准的AdaBoost只适用于二分类任务,Bagging能不经修改地用于多分类、回归任务。
Bagging还有一个优点:每个基学习器只使用了初始训练数据据集的63.2%的样本,剩下的约36.8%样本可以用作验证集对泛化性能进行包外估计。
包外样本的用途:当基学习器是决策树时,可以使用包外样本来辅助剪枝,或用于估计决策树中各节点的后验概率以辅助对零训练样本节点的处理。当基学习器为神经网络时,可以使用包外样本来辅助早期停止以减小过拟合风险。
从偏差方差角度看,Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用较为明显。

Random Forest(随机森林)
随机森林是Bagging的一个扩展变体,RF以决策树为基学习器构建Bagging集成,在传统的决策树基础上引入了随机属性的选择。具体来说,传统的决策树在选择划分属性时是在当前节点的属性集合(假定有d个属性)中选出一个最优属性。而在RF中,对基决策树中的每个节点,先从该节点的属性集合中随机选择一个包含k个属性的子集,然后从这个子集中选择一个最优的属性用于划分。这里的参数k控制了随机性引入的程度。当k=d时,基决策树的构建与传统决策树相同,当k=1时,则是随机选择一个属性用于划分。一般k=log2d。
随机森林对Bagging做了小小的改动,随机森林的多样性不仅来自样本的扰动,还来自属性的扰动,使得最终集成的学习器有更好的泛化性能。
随机森林较Bagging拥有更好的性能,因为在个体决策树构建的过程中,Bagging使用的是确定型决策树,在选择划分属性时,对节点的所有属性进行考察,而随机森林使用的是随机型决策树只需考察一个属性子集。

XGBoost与GBDT的不同
XGBoost的目标损失函数保留了泰勒展开的二次项,能够减小方差

从目标函数出发:
xgboost是gbdt的增强版,基函数也是决策树,也是采用平方误差作为损失函数。
不同点是gbdt针对第m棵树的目标函数,只是简单的拟合之前模型的残差。

而xgboost的目标函数有两点不同,首先引入了损失函数展开的的泰勒展开平方项。第二,针对当前的决策树引入了树的复杂度L2正则项。这两个操作都能直接减少方差。

针对损失函数引入的平方项与决策树引入的L2正则项,重新定义了决策树特有的打分函数。从而有了新的切分点查找算法。
参考:
统计学习方法
机器学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值