前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >集成学习提高机器学习效果

集成学习提高机器学习效果

作者头像
hzr
发布2018-02-02 16:00:36
1.3K0
发布2018-02-02 16:00:36

集成学习通过综合多个模型来帮助改进机器学习结果。与单一模型相比,这种方法可以产生更好的预测性能。这就是为什么集成方法被广泛应用在许多著名的机器学习竞赛中,比如Netflix Competition,KDD 2009和Kaggle。

这里Stats bot团队将会向你介绍这个方法的优点,并且数据科学家瓦迪姆Smolyakov会深入介绍三个基本集成学习技术。

集成方法是将多种机器学习技术结合成一个预测模型的元算法,例如常用于减少方差的bagging算法、减小偏差的boosting算法或用于提升预测性能的stacking方法。

集成方法大致可分为两大类:

  • 顺序集成方法,其中基学习方法是顺序生成的(例如AdaBoost)。顺序方法的基本思想是利用个体学习器之间的依赖关系,因此可以通过剔除之前错误标记的例子来提高性能。
  • 并行集成方法,其中基学习方法可并行生成(例如随机森林)。并行方法的基本思想是利用个体学习器之间的相互独立性,因此通过平均可以显著降低误差。

大多数集成方法仅使用一种基学习算法来生成一组“个体学习器”,此时集成中只包含同种类型的个体学习器,这样的集成是同质的(homogeneous)。

也有一些集成方法使用不同类型的学习算法,即会产生不同类型的个体学习器,导致异质(heterogenous)集成。为了使集成方法比其任何成员方法更精确,个体学习器必须尽可能准确和尽可能多样化。

Bagging

Bagging基于自助聚合。降低估算方差的一种方法是将多个估算值平均在一起。例如我们可以在数据的不同子集上训练M个不同的树(随机选择替换)并计算集合:

Bagging使用自助采样法来获取训练基学习器的数据子集。为了汇总基础学习器的输出,bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。

我们可以通过在Iris数据集的分类任务学习bagging。我们可以选择两个基本估计器:决策树和k-NN分类器。图1显示了基础估计器的学习决策边界以及应用于Iris数据集的bagging集成。

准确度:0.63(+/- 0.02)[决策树] 准确度:0.70(+/- 0.02)[K-NN] 准确度:0.64(+/- 0.01)[Bagging Tree] 准确度:0.59(+/- 0.07)[Bagging K-NN]

如图可以看到决策树显示的轴线平行边界,同时K-NN分类器在这里选取1作为k值。采用10个基本估计量对训练数据和特征进行占比80%的抽样。

与k-NN的bagging集成相比,决策树bagging集成的准确度更高。K-NN对训练样本的波动较不敏感,因此被称为稳定学习器。稳定学习器之间几乎没有差异性,因此集成稳定学习器不会提高泛化性能。

该图还显示了测试精度如何随着集成的大小而提高。在交叉验证的结果中,我们可以看到准确性增加到大约10个基本估计值,然后趋于平稳。因此,将基本估计量添加到10以上仅增加了Iris数据集的计算复杂度,而没有提高准确性。

我们也可以看到bagging tree集成的学习曲线。注意训练数据的平均误差为0.3,测试数据为U形误差曲线。训练和测试错误之间的最小偏差产生在训练集大小的80%左右。

常用的一类集成算法是随机森林。在随机森林中,集合中的每棵树都是从训练集中的替换样本(即自助采样方法所获得的样本)中生成的。另外,不使用所有的特征,而是选择一个随机的特征子集,进一步增大树之间的差异性。

因此,随机森林的偏差略有增加,但由于相关性较小的树的平均使其方差减小,致使整体具有较好增益效果。

在一个极其随机的树算法中,随机性更进一步:分裂阈值是随机的。而不是寻找最具判别力的阈值,对于每个候选特征随机选取阈值,并且将这些随机生成的阈值中的最好的挑选为分割规则。通常这样做可以减少模型的方差,代价是稍微增加偏差。

Boosting

Boosting是指能够将弱学习器转化为强学习器的一系列算法。提升的主要原则是将一系列弱学习者-比随机猜测稍好的模型,如小型决策树-拟合数据的加权版本。在boosting算法中前几轮基学习器的错误分类例子会很重要。

然后通过加权多数表决(分类)或加权平均(回归)将结果结合起来以产生最终的预测。Boosting和并行学习方法(如bagging)之间的主要区别在于,基础学习器将按照数据的加权版本顺序进行训练。

下面的算法描述了Boosting最著名的代表AdaBoost算法:

我们看到第一个基本分类器y1(x)是使用完全相等的加权系数进行训练的。在随后的增加轮次中,针对被错误分类的数据点的权重系数增加,并且针对正确分类的数据点的权重系数减小。

ε表示每个基础分类器的加权错误率。因此,加权系数α给予更准确的分类器更大的权重。

AdaBoost算法如上图所示。每个基础学习器由一个深度为1的决策树组成,因此根据一个特征阈值对数据进行分类,该特征阈值将空间划分为两个与同一个轴平行的由线性决策表分隔开的区域。该图还显示了测试精度如何随着集成的大小以及训练和测试数据的学习曲线而改善。

梯度树提升算法是任意可微损失函数的推广。它可以用于回归和分类问题。梯度提升按顺序构建模型:

在每个阶段,选择决策树hm(x)以使给定当前模型Fm-1(x)的损失函数L最小化:

用于回归和分类的算法在所使用的损失函数类型不同。

Stacking

Stacking是一种通过元分类器或元回归器组合多个分类或回归模型的集成方法。初级模型是基于一个完整的训练集进行训练,然后元模型是特征训练基础层模型的输出。

初级模型通常由不同的学习算法组成,因此stacking通常是异质集成的。下面的算法总结了stacking:

以上精确度在上图的右上图中可见:

准确度:0.91(+/- 0.01)[KNN] 准确度:0.91(+/- 0.06)[随机森林] 准确度:0.92(+/- 0.03)[朴素贝叶斯] 准确度:0.95(+/- 0.03)[stacking分类器]

上图展示了一个stacking集成方法的例子。它将k-NN,随机森林和朴素贝叶斯作为初级学习器,它们的生成结果结合Logistic回归作为元分类器。我们可以看到stacking分类器实现的决策边界的混合。从图中还可以看出,stacking比单独的分类器具有更高的准确性,并且,在学习曲线中没有显示过度拟合的迹象。

stacking是赢得Kaggle数据科学竞赛的常用方法。例如,奥托集团产品分类挑战赛的第一名使用了30多个模型的stacking集成,其输出被用作三个元分类器的特征:XGBoost、神经网络和Adaboost。详细信息请参阅以下链接

代码

本文中用于生成图像的所有代码,可见于这个ipython笔记本

总结

除了本文所研究的方法之外,通常在深度学习中使用集成学习来训练兼具多样性和准确度的分类器

。个体学习器的多样性可以通过改变体系结构、超参数设置和训练技术来实现。

集成方法在测试数据集上创造了良好的性能记录,并且是Kaggle数据科学竞赛的获胜的常用方法。

推荐阅读

这篇文章首发于Stats and Bots

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Bagging
  • Boosting
  • Stacking
    • 代码
    • 总结
      • 推荐阅读
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档