集成机器学习2—Bagging和随机森林2

1 随机森林

∙ \bullet 决策树很容易过拟合,即偏差低、方差高。如果训练样本为一个叶子节点,误差为0。
∙ \bullet Bagging是一种降低算法方差的方法,主要方式是平均多个模型的预测。BaggingBootstrap aggregating(自助聚集)。Bootstrap是一种样本采样方式,aggregating即是对模型进行平均
∙ \bullet Bagging适合对偏差低、方差高的模型进行融合。
∙ \bullet 随机森林:Bagging多棵决策树。森林代表有多棵树,随机代表在bagging的基础上,多棵树之间的相关性较低,随机性较强。

2 Bootstrap、在这里插入图片描述

有些样本会出现多次,有些不会出现。一个bootstrap样本集合覆盖了原始数据中63.2%的样本。
  注意:一个bootstrap样本是N次有放回抽样得到的样本集合

3 Bagging

∙ \bullet 对给定有N个样本的数据集D进行Bootstrap采样,得到 D 1 D^1 D1,在 D 1 D^1 D1上训练 f 1 f^1 f1
∙ \bullet 上述过程重复M次,得到M个模型,则M个模型的平均(回归)/投票(分类)为: f a v g ( x ) = 1 M ∑ m = 1 M f m ( x ) f_{avg}(\mathbf x) = \frac{1}{M}\sum_{m=1}^{M}f_m(\mathbf x) favg(x)=M1m=1Mfm(x)
上式就是aggregating,可以证明Bagging可以降低模型的方差。

4 Bagging可降低模型的方差

∙ \bullet 令随机变量X的均值为 μ \mu μ,方差为 σ 2 \sigma^2 σ2

∙ \bullet 则N个独立同分布的样本的样本均值 X ˉ \bar X Xˉ为: X ˉ = 1 N ∑ i = 1 N X i \bar X = \frac{1}{N}\sum_{i=1}^{N}X_{i} Xˉ=N1i=1NXi

∙ \bullet 样本均值 X ˉ \bar X Xˉ的期望为: E ( X ˉ ) = 1 N ∑ i = 1 N E ( X i ) = μ E(\bar X) = \frac{1}{N}\sum_{i=1}^{N}E(X_i) = \mu E(Xˉ)=N1i=1NE(Xi)=μ
所以样本均值 X ˉ \bar X Xˉ的期望和 X X X的期望相等。老师讲到 E ( X i ) E(X_i) E(Xi)的部分为 μ \mu μ,但我觉得可能应该从另外一个角度来看, E ( X i ) E(X_i) E(Xi)中的 X i X_i Xi实际是一个常量,所以 E ( X i ) = X i E(X_i)=X_i E(Xi)=Xi,那么 1 N ∑ i = 1 N E ( X i ) = 1 N ∑ i = 1 N X i = μ \frac{1}{N}\sum_{i=1}^{N}E(X_i) = \frac{1}{N}\sum_{i=1}^{N}X_i = \mu N1i=1NE(Xi)=N1i=1NXi=μ

∙ \bullet 样本均值 X ˉ \bar X Xˉ的方差为: V ( X ˉ ) = 1 N 2 ∑ i = 1 N V ( X i ) = σ 2 N V(\bar X) = \frac{1} {N^2}\sum_{i=1}^{N}V(X_i) = \frac{\sigma^2}{N} V(Xˉ)=N21i=1NV(Xi)=Nσ2,即样均值 X ˉ \bar X Xˉ的方差比X的方差小。

把这里的X换为 f f f,就是 f f f经过bagging后,方差能减小。

在学习这部分是遇到过一个难以理解的方面(到现在也还未完全确定理解):X是随机变量, X i X_i Xi是变量的其中一个值,对 X X X求均值 X ˉ \bar X Xˉ还好理解;但对 X ˉ \bar X Xˉ求期望、方差,实在难以理解,因为 X ˉ \bar X Xˉ只有一个值,或者可以理解为常量(不确定可不可以这样理解),那求期望、方差有什么意义呢?这个问题是不是类似这样一个道理: X ˉ \bar X Xˉ尽管只有一个只,但可以将实验进行多次,那么就会有多个 X ˉ \bar X Xˉ?比如,随机变量X类似于装满数字的箱子,从箱子中抽出N个数字,可以得到一个均值,再重复进行就可以得到多个均值。

使用sklearn进行集成学习——理论:https://www.cnblogs.com/jasonfreak/p/5657196.html

∙ \bullet 在Bagging中,M次预测结果的均值 f a v g ( x ) f_{avg}(\mathbf x) favg(x)的方差,比用原始训练样本单次训练的模型的预测结果的方差小,均值不变。即Bagging可降低模型的方差,Bagging不改变模型的偏差(偏差 = 预测均值 - 真实规律值)
单次训练只有一个结果,但也存在方差。这种说法,可能印证了对上面问题的个人理解。

∙ \bullet 注意:Bagging中每个模型不完全独立,因为训练样本有一部分相同,方差的减少也没那么多,但也会减少。若 f m f_m fm之间的相关性为 ρ \rho ρ,则 f a v g f_{avg} favg的方差为: ρ ∗ σ 2 + ( 1 − ρ ) ∗ σ 2 M \rho * \sigma^2 + (1 - \rho) * \frac{\sigma^2}{M} ρσ2+(1ρ)Mσ2。只要 ρ \rho ρ不是1,方差就会下降。

5 Scikit-learn中的Bagging

∙ \bullet Scikit-Learn中支持对任意基学习器的Bagging。分类:BaggingClassifier,回归:BaggingRegressor,这两个类的构造函数参数完全相同。
在这里插入图片描述
∙ \bullet BaggingClassifier的参数
在这里插入图片描述
max_samples:不是从原始样本中有放回随机采样吗?是不是就是指这个采样要用多少样本?或者学习器要使用的样本上限,而不是采样?
max_feature:每次都是从原始特征随机采样百分之多少,会使得树与树之间的相关性降得更低。怎么从说明上看起来,不像是百分比呢?
什么,还可以设置为无放回采样啊。
bootstrap、bootstrap_feature,一般就用true、false,默认就是这样。
oob_score,可以使得不用交叉验证了。而直接使用代外样本进行验证。这里的交叉验证,应该是每个模型训练时,都会有个交叉验证吧?

6 Out-of-bag error (OOBE)

∙ \bullet 在Bagging中,每个基学习器只在原始数据集的一部分上训练。所以可以不用交叉验证,直接用外包样本上的误差(Out-of-bag error)来估计它的泛化误差/测试误差。在这里插入图片描述

7 基学习器数目

∙ \bullet 在Bagging中,通常基学习器的数目越多,效果越好,但测试与训练的时间也会增加。
∙ \bullet 注意:当树的数量超过一个临界值后,算法的效果并不会很显著地变好。所以参数基学习器数目n_estimators不是模型复杂度参数,无需通过交叉验证来确定。
∙ \bullet 参数建议值:对分类问题,可设置基学习器数目为 D \sqrt D D ,其中D为特征数目;对回归问题,可学习基学习器数目为D/3。这是在scikit-Learn中的建议。

8 随机森林(Random Forest)

∙ \bullet 由于只是训练数据有一些不同,对决策树算法进行Bagging得到的多棵树高度相关,因此带来的方差减少有限。
∙ \bullet 随机森林会随机选择一部分特征和一部分样本,这样可以降低树的相关性。
∙ \bullet 随机森林在很多案例上被证明有效,但牺牲了可解释性,因为有多棵树,所以不太好解释。森林:多棵树,随机:对样本和特征进行随机抽取。随机选择部分特征、随机选择部分样本,但问题是Bagging的Bootstrap不也就是随机选择的么?随机森林的随机体现在什么地方?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值