1 随机森林
∙
\bullet
∙ 决策树很容易过拟合,即偏差低、方差高。如果训练样本为一个叶子节点,误差为0。
∙
\bullet
∙ Bagging是一种降低算法方差的方法,主要方式是平均多个模型的预测。Bagging:Bootstrap 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=1∑Mfm(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ˉ=N1∑i=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ˉ)=N1∑i=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
N1∑i=1NE(Xi)=N1∑i=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ˉ)=N21∑i=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不也就是随机选择的么?随机森林的随机体现在什么地方?