【学习笔记】集成学习

概念

集成学习(Ensemble Learning)就是通过某种策略将多个模型集成起来,通过群体决策来提高决策准确率。当弱模型被正确组合时,我们可以得到更精确和/或更鲁棒的模型。集成学习首要的问题是如何集成多个模型。比较常用的集成策略有直接平均、加权平均等。
对于 M M M个不同的模型 f 1 ( x ) , ⋯   , f M ( x ) f_{1}({x}), \cdots, f_{M}({x}) f1(x),,fM(x),其平均期望错误为 R ‾ ( f ) \overline{R}(f) R(f)。基于简单投票机制的集成模型 F ( x ) = 1 M ∑ m = 1 M f m ( x ) F(\mathbf{x})=\frac{1}{M} \sum_{m=1}^{M} f_{m}(\mathbf{x}) F(x)=M1m=1Mfm(x) F ( x ) F(\mathbf{x}) F(x)的期望错误在 1 M R ‾ ( f ) \frac{1}{M} \overline{\mathcal{R}}(f) M1R(f) R ‾ ( f ) \overline{R}(f) R(f)之间。因此,为了得到更好的集成效果,要求每个模型之间具备一定的差异性。并且随着模型数量的增多,其错误率也会下降,并趋近于0。

常用的模型集成方法

为了建立一个集成学习方法,我们首先要选择待聚合的基础模型。在大多数情况下,我们会使用单一的基础学习算法,这样一来我们就有了以不同方式训练的同质弱学习器。然而,也有一些方法使用不同种类的基础学习算法,得到异质弱学习器。

Bagging类方法

Bagging类方法是通过随机构造训练样本、随机选择特征等方法来提高每个基模型的独立性。在并行化的方法中,我们单独拟合不同的学习器,因此可以同时训练它们,它的目标是生成比单个模型更鲁棒的集成模型。
在这里插入图片描述

Bagging自助聚合

Bagging(Bootstrap Aggregating)通常考虑的是同质弱学习器,相互独立地并行学习这些弱学习器,并按照某种确定性的平均过程将它们组合起来。通过不同模型的训练数据集的独立性来提高不同模型之间的独立性。我们在原始训练集上进行有放回的随机采样,得到 M M M比较小的训练集并训练 M M M个模型,然后通过投票的方法进行模型集成。Bagging 的重点在于获得一个方差比其组成部分更小的集成模型。

随机森林

随机森林(Random Forest)是在Bagging的基础上再引入了随机特征,进一步提高每个基模型之间的独立性。在随机森林中,每个基模型都是一棵决策树。

随机森林使用了CART(Classification And Regression Tree)决策树作为弱学习器。在使用决策树的基础上,随机森林对决策树的建立做了改进,对于普通的决策树,我们会在节点上所有的 n n n个样本特征中选择一个最优的特征来做决策树的左右子树划分,但是随机森林通过随机选择节点上的一部分样本特征,这个数字小于 n n n,假设为 n s u b n_{s u b} nsub,然后在这些随机选择的 n s u b n_{s u b} nsub个样本特征中,选择一个最优的特征来做决策树的左右子树划分。这样进一步增强了模型的泛化能力。  
  
如果 n s u b = n n_{s u b}=n nsub=n,则此时随机森林的CART决策树和普通的CART决策树没有区别。 n s u b n_{s u b} nsub越小,则模型约健壮,当然此时对于训练集的拟合程度会变差,也就是说 n s u b n_{s u b} nsub越小,模型的方差会减小,但是偏差会增大。在实际案例中,一般会通过交叉验证调参获取一个合适的 n s u b n_{s u b} nsub的值。

Boosting类方法

Boosting 类方法是按照一定的顺序来先后训练不同的基模型,每个模型都针对前序模型的错误进行专门训练。根据前序模型的结果,来调整训练训练样本的权重,从而增加不同基模型之间的差异性。直观地说,每个模型都把注意力集中在目前最难拟合的观测数据上。这样一来,在这个过程的最后,我们就获得了一个具有较低偏置的强学习器。Boosting类方法是一种非常强大的集成方法,只要基模型的准确率比随机猜测好,就可以通过集成方法来显著地提高集成模型的准确率。
在这里插入图片描述

AdaBoost

Boosting类集成模型的目标是学习一个加性模型 F ( x ) = ∑ m = 1 M α m f m ( x ) F(\mathbf{x})=\sum_{m=1}^{M} \alpha_{m} f_{m}(\mathbf{x}) F(x)=m=1Mαmfm(x)其中 f m ( x ) f_{m}({x}) fm(x)为弱分类器, α m \alpha_{m} αm为弱分类器的集成权重, F ( x ) F({x}) F(x)称为强分类器。

为了提高集成的效果,应当尽量使得每个弱分类器的差异尽可能大。一种有效的算法是用迭代的方法来学习每个弱分类器,即按照一定的顺序依次训练每个弱分类器。在学习了第 m m m个弱分类器后,增加其分错样本的权重,使得第 m + 1 m+1 m+1个弱分类器更关注于前面弱分类器分错的样本。这样增加每个弱分类器的差异,最终提升的集成分类器的准确率。AdaBoost算法是一种迭代式的训练算法,通过改变数据分布来提高弱分类器的差异。在每一轮训练中,增加分错样本的权重,减少分对样本的权重,从而得到一个新的数据分布。
在这里插入图片描述
假设我们面对的是一个二分类问题:数据集中有 N N N个观测数据。

  1. 在算法的起始阶段,所有的观测数据都拥有相同的权重 w 1 ( n ) ← 1 N , ∀ n ∈ [ 1 , N ] w_{1}^{(n)} \leftarrow \frac{1}{N}, \forall n \in[1, N] w1(n)N1,n[1,N]
  2. 将下面的步骤重复 M M M次:
    (1)用当前观测数据的权重 w m ( 1 ) , … , w m ( N ) w_{m}^{(1)}, \dots, w_{m}^{(N)} wm(1),,wm(N)拟合可能的最佳弱模型 f m f_{m} fm
    (2)计算更新系数的值,更新系数是弱学习器的某种标量化评估指标,它表示相对集成模型来说,该弱学习器的分量如何。 α m ← 1 2 log ⁡ 1 − ϵ m ϵ m \alpha_{m} \leftarrow \frac{1}{2} \log \frac{1-\epsilon_{m}}{\epsilon_{m}} αm21logϵm1ϵm其中, ϵ m \epsilon_{m} ϵm为弱分类器在数据集上的加权错误。
    (3)通过添加新的弱学习器与其更新系数的乘积来更新强学习器。
    (4)计算新观测数据的权重,该权重表示我们想在下一轮迭代中关注哪些观测数据(聚和模型预测错误的观测数据的权重增加,而正确预测的观测数据的权重减小)。 w m + 1 ( n ) ← w m ( n ) exp ⁡ ( − α m y ( n ) f m ( x ( n ) ) ) , ∀ n ∈ [ 1 , N ] w_{m+1}^{(n)} \leftarrow w_{m}^{(n)} \exp \left(-\alpha_{m} y^{(n)} f_{m}\left(\mathbf{x}^{(n)}\right)\right), \forall n \in[1, N] wm+1(n)wm(n)exp(αmy(n)fm(x(n))),n[1,N]

Stacking

Stacking与Bagging和Boosting主要存在两方面的差异。首先,Stacking通常考虑的是异质弱学习器,而Bagging和Boosting主要考虑的是同质弱学习器。其次,Stacking学习用元模型组合基础模型,而Bagging和Boosting则根据确定性算法组合弱学习器。

对于分类问题来说,我们可以选择 KNN分类器、Logistic回归和SVM作为弱学习器,并决定学习神经网络作为元模型。然后,神经网络将会把三个弱学习器的输出作为输入,并返回基于该输入的最终预测。
在这里插入图片描述
假设我们想要拟合由 L L L个弱学习器组成的Stacking集成模型。

  1. 将训练数据分为两组;
  2. 选择 L L L个弱学习器,用它们拟合第一组数据;
  3. 使用 L L L个学习器中的每个学习器对第二组数据中的观测数据进行预测;
  4. 在第二组数据上拟合元模型,使用弱学习器做出的预测作为输入。

将数据集一分为二是因为对用于训练弱学习器的数据的预测与元模型的训练不相关。因此,将数据集分成两部分的一个明显缺点是:只有一半的数据用于训练基础模型,另一半数据用于训练元模型。为了克服这种限制,我们可以使用k-折交叉训练方法:对于任意的观测数据,弱学习器的预测都是通过在 k-1 折数据(不包含已考虑的观测数据)上训练这些弱学习器的实例来完成的。换句话说,它会在 k-1 折数据上进行训练,从而对剩下的一折数据进行预测。迭代地重复这个过程,就可以得到对任何一折观测数据的预测结果。这样一来,我们就可以为数据集中的每个观测数据生成相关的预测,然后使用所有这些预测结果训练元模型。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值