集成学习(一)Bagging

前边学习了:十大集成学习模型(简单版)-CSDN博客

Bagging又称为“装袋法”,它是所有集成学习方法当中最为著名、最为简单、也最为有效的操作之一。

在Bagging集成当中,我们并行建立多个弱评估器(通常是决策树,也可以是其他非线性算法),并综合多个弱评估器的结果进行输出。当集成算法目标是回归任务时,集成算法的输出结果是弱评估器输出的结果的平均值,当集成算法的目标是分类任务时,集成算法的输出结果是弱评估器输出的结果少数服从多数。

由于bagging就是将多个模型进行集成,比较简单,所以,本文不讲bagging的原理,通过几个问题让大家彻底了解bagging方法:

一、为什么Bagging算法的效果比单个评估器更好?

二、为什么Bagging可以降低方差?

三、为什么误差可以分解为偏差、方差和噪声?三者分别是什么意思?

四、Bagging有效的基本条件有哪些?Bagging的效果总是强于弱评估器吗?

五、Bagging方法可以集成决策树之外的算法吗?

六、怎样增强Bagging中弱评估器的独立性?

七、除了随机森林,你还知道其他Bagging算法吗?

八、即使是单颗树,为什么它的feature_importances_也会有一定的随机性?

一、为什么Bagging算法的效果比单个评估器更好?

该问题其实是在考察Bagging方法降低模型泛化误差的基本原理。

泛化误差是模型在未知数据集上的误差,更低的泛化误差是所有机器学习/深度学习建模的根本目标。在机器学习当中,泛化误差一般被认为由偏差、方差和噪音构成。

其中偏差是预测值与真实值之间的差异,衡量模型的精度。方差是模型在不同数据集上输出的结果的方差,衡量模型稳定性。噪音是数据收集过程当中不可避免的、与数据真实分布无关的信息。

当算法是回归算法、且模型衡量指标是MSE时,模型的泛化误差可以有如下定义:

泛化误差=偏差*偏差+方差+噪音*噪音 = bias*bias+variance+noise*noise

(该公式可以通过泛化误差、偏差、方差与噪音的定义推导而得,下面有推导)

Bagging的基本思想是借助弱评估器之间的”独立性”来降低方差,从而降低整体的泛化误差。这个思想可以被推广到任意并行使用弱分类器的算法或融合方式上,极大程度地左右了并行融合方式的实际使用结果。其中,“降低方差”指的是bagging算法输出结果的方差一定小于弱评估器输出结果的方差,因此在相同数据上,随机森林往往比单棵决策树更加稳定,也因此随机森林的泛化能力往往比单棵决策树更强。

二、为什么Bagging可以降低方差?

设真实值为y,加上误差之后的值为 y_{\epsilon } = y + c,模型预测值为 f(x) ,并且误差服从均值为0的正态分布,即\epsilon \sim N(0,\sigma ^{2})

偏差:度量了学习算法的期望预期与真实结果的偏离程度,即刻画了学习算法本身的拟合能力,即y-f(x)

方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响,即E\left [ f(x)-E(f(x))^{2} \right ]

噪声:表达了在当前任务上任何学习算法所能够达到的期望泛化误差的下界,即刻画了学习问题本身的难度,也即\epsilon =y_{\varepsilon }-y

推导

因此,误差可以分解为偏差、方差与噪声之和。 

三、为什么误差可以分解为偏差、方差和噪声?三者分别是什么意思?

3.1 回归问题

以随机森林为例,假设现在随机森林中含有 n 个弱评估器( n 棵树),任意弱评估器上的输出结果是 X_{i},则所有这些弱评估器输出结果的方差可以被表示为var(X_{i})  。假设现在我们执行回归任务,则森林的输出结果等于森林中所有树输出结果的平均值,因此森林的输出可以被表示为 \bar{X}=\frac{\sum X_{i}}{n},因此随机森林输出结果的方差可以被表示为 var(\bar{X}) ,也可以写作Var(\frac{​{\sum X_{i}}}{n})

当森林中的树互相独立时, var(\bar{X})永远小于 var(X_{i}),推导如下:

更一般的式子:

其中, ρ 为弱评估器之间的相关系数,可见当弱评估器之间完全独立时, ρ 为0。与独立时是一样的。这也意味着随机森林输出结果的方差与森林中弱评估器之间的相关性是正相关的。评估器之间的相关性越强,随机森林输出的结果的方差就越大,Bagging方法通过降低方差而获得的泛化能力就越小。

因此,

1、在bagging的弱分类器选取原则中有一条要求弱分类器之间尽可能相互独立,而且独立性越高bagging越有效,当弱评估器之间没有任何独立性了,也即每个弱评估器完全一样,那bagging也就没有任何意义了。

2、同时还要要求弱评估器的方差要大,偏差要小,主要是因为bagging是降低方差,不能够降低偏差,采用大偏差的弱评估器,训练结果非常不可控。

3.2 分类问题

在bagging中,需要对每棵树上的输出结果进行少数服从多数的计算,并将“多数”指向的类别作为随机森林分类器的结果。因此,当弱评估器的方差是 var(X_{i})时,随机森林分类器的方差可以写作var(f(\bar{X})),其中f(z)就是sigmoid函数,\bar{X}是所有弱评估器的分类结果的均值。让 var(f(\bar{X})) 在 E(\bar{X})处进行一阶泰勒展开,推导如下:

由于f为sigmoid函数,所以f{}'< 1,因此有var(f(\bar{X}))< Var(X)

四、Bagging有效的基本条件有哪些?Bagging的效果总是强于弱评估器吗?

(这块要重点记一下)
1、弱评估器的偏差较低,特别地来说,弱分类器的准确率至少要达到50%以上

2、弱评估器之间相关性弱,最好相互独立

3、弱评估器是方差较高、不稳定的评估器

1、弱评估器的偏差较低,特别地来说,弱分类器的准确率至少要达到50%以上

Bagging集成算法是对基评估器的预测结果进行平均或用多数表决原则来决定集成评估器的结果。在分类的例子中,假设我们建立了25棵树,对任何一个样本而言,平均或多数表决原则下,当且仅当有13棵以上的树判断错误的时候,随机森林才会判断错误。假设单独一棵决策树在样本i上的分类准确率在0.8上下浮动,那一棵树判断错误的概率大约就有0.2(\epsilon ),那随机森林判断错误的概率(有13棵及以上的树都判断错误的概率)是:

可见,判断错误的几率非常小,这让随机森林的表现比单棵决策树好很多。基于上述式子,我们可以绘制出以弱分类器的误差率\epsilon为横坐标、随机森林的误差率为纵坐标的图像。

可以从图像上看出,当基分类器的误差率小于0.5,即准确率大于0.5时,集成的效果是比弱分类器要好的。相反,当基分类器的误差率大于0.5,袋装的集成算法就失效了。所以在使用随机森林之前,一定要检查,用来组成随机森林的分类树们是否都有至少50%的预测正确率。

2、弱评估器之间相关性弱,最好相互独立

在证明Bagging降低方差的数学过程中已经申明了很多次,唯有弱评估器之间相互独立、弱评估器输出的结果相互独立时,方差计算公式的前提假设才能被满足,Bagging才能享受降低方差的福利。

然而在现实中,森林中的弱评估器很难完全相互独立,因为所有弱评估器都是在相同的数据上进行训练的、因此构建出的树结构也大同小异。幸运的是,我们能够衡量弱评估器之间相关性。以随机森林回归为例,假设任意弱评估器之间的相关系数为 ρ ,则随机森林输出结果的方差等于:

这个公式是根据比奈梅定义(Bienaymé's Identity)与协方差相关的公式推导出来的,这暗示随机森林输出结果的方差与森林中弱评估器之间的相关性是正相关的,弱评估器之间的相关性越强,随机森林输出的结果的方差就越大,Bagging方法通过降低方差而获得的泛化能力就越小。因此在使用随机森林时,我们需要让弱评估器之间尽量相互独立,我们也可以通过这一点来提升随机森林的水平。

3、弱评估器是方差较高、不稳定的评估器

因为Bagging是作用于方差的集成手段,所以Bagging方法擅长处理方差大、偏差低的模型,而不擅长处理方差小、偏差大的模型,对于任意算法而言,方差与偏差往往不可兼得,这也很容易理解——想要在当前数据集上获得低偏差,必然意味着需要重点学习当前数据集上的规律,就不可避免地会忽略未知数据集上的规律,因此在不同数据集上进行测试时,模型结果的方差往往很大。

五、Bagging方法可以集成决策树之外的算法吗?

强大又复杂的算法如决策树、支持向量机等,往往学习能力较强,倾向于表现为偏差低、方差高,这些算法就比较适合于Bagging。而线性回归、逻辑回归、KNN等复杂度较低的算法,学习能力较弱但表现稳定,因此倾向于表现为偏差高,方差低,就不太适合被用于Bagging。

六、怎样增强Bagging中弱评估器的独立性?

正如前述,在实际使用数据进行训练时,我们很难让Bagging中的弱评估器完全相互独立,主要是因为:

(1)训练的数据一致

(2)弱评估器构建的规则一致

导致最终建立的弱评估器都大同小异,Bagging的效力无法完整发挥出来。为了弱评估器构建规则一致的问题,有了Averaging和Voting这样的模型融合方法:基本来看,就是使用Bagging的逻辑来融合数个不同算法的结果。而当我们不使用模型融合时,我们可以使用“随机性”来削弱弱分类器之间的联系、增强独立性、提升随机森林的效果。

在随机森林中,天生就存在有放回随机抽取样本建树的机制,因此才会有bootstrap、max_samples等参数,才会有袋外数据、袋外评估指标oob_score等属性,意在使用不同的数据建立弱评估器。除了有放回随机抽样之外,还可以使用max_features随机抽样特征进行分枝,加大弱评估器之间的区别。

正因为存在不同的随机的方式,Bagging集成方法下才有了多种不同的算法。

七、除了随机森林,你还知道其他Bagging算法吗?

Bagging方法的原理简单,因此Bagging算法之间的不同主要体现在随机性的不同上。在上世纪90年代,对样本抽样的bagging、对特征抽样的bagging、对样本和特征都抽样的bagging都有不同的名字,不过今天,所有这些算法都被认为是装袋法或装袋法的延展。在sklearn当中,除了随机森林之外还提供另一个bagging算法:极端随机树。极端随机树是一种比随机森林更随机、对方差降低更多的算法,我们可以通过以下两个类来实现它:

  • sklearn.ensemble.ExtraTreesClassifier
  • sklearn.ensemble.ExtraTreesRegressor

与随机森林一样,极端随机树在建树时会随机挑选特征,但不同的是,随机森林会将随机挑选出的特征上每个节点都进行完整、精致的不纯度计算,然后挑选出最优节点,而极端随机树则会机选择数个节点进行不纯度计算,然后选出这些节点中不纯度下降最多的节点。这样生长出的树比随机森林中的树更不容易过拟合,同时独立性更强,因此极端随机树可以更大程度地降低方差。

当然了,这种手段往往也会带来偏差的急剧下降,因此极端随机树是只适用于方差过大、非常不稳定的数据的。除非特殊情况,我们不会考虑使用极端随机树。

八、即使是单颗树,为什么它的feature_importances_也会有一定的随机性?

这种随机性源于CART树对切分点的选取。根据评估器的说明,哪怕是max_features=n_features(即每次训练带入全部特征、而max_features<n_features时则每次切分带入部分特征、此时随机性更强),在进行决策树生长时也经常遇到拥有相同效力的备选切分点(即基于基尼系数的信息增益相同),此时只能随机挑选其中一个备选点进行切分,而选取哪个切分点,就必然给对应的特征累计更多的重要性。这也就是为何相同的数据在多次建模时特征重要性会各不相同的原因。

记下来学习:集成学习(二)Boosting-CSDN博客

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 05:50:03       53 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 05:50:03       55 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 05:50:03       46 阅读
  4. Python语言-面向对象

    2024-07-11 05:50:03       56 阅读

热门阅读

  1. 解锁SQL Server的迷宫:深入死锁的诊断与解决之道

    2024-07-11 05:50:03       21 阅读
  2. vite搭建vue2项目

    2024-07-11 05:50:03       19 阅读
  3. 基于STM32设计的智能手环(ESP8266+华为云IOT)178

    2024-07-11 05:50:03       21 阅读
  4. 代码优化(2)——小程序登录

    2024-07-11 05:50:03       22 阅读
  5. LeetCode 981, 219, 78

    2024-07-11 05:50:03       23 阅读
  6. linux中的僵尸进程

    2024-07-11 05:50:03       16 阅读
  7. 保持边界感

    2024-07-11 05:50:03       21 阅读