实用机器学习笔记二十一:集成学习之Bagging
前言:
本文是个人在 B 站自学李沐老师的实用机器学习课程【斯坦福 2021 秋季中文同步】的学习笔记,感觉沐神讲解的非常棒 yyds。
Bagging:
Bagging 的由来:B ootstrapAGG rgratING ,没有其他特殊含义。
Bagging核心思想:并行(独立)训练n个模型做决策。
回归问题:多个模型的输出值的平均
分类问题:多个模型投票表决,哪个类型被预测的占比最高,就是哪个类型。
如何训练这n个模型:
每一个模型都是利用在同样的数据集上进行bootstrap采样得到的数据进行训练。(独立进行的哦)
bootstrap采样是什么?
假设有m个可供训练的样本,随机有放回的从里面采样m个数据作为一个模型的训练集。注意:有放回的采样(会有重复样本),就是采样一个样本,然后放回,然后再随机采样....。而且还要注意的是在训练每一个模型时,这个过程是独立进行的,也就是说每一个学习者都要进行这个采样过程。
每次bootstrap采样出来的样本数据集中大概包含的原始样本。那么采样出来的数据集中重复的样本大概就有27%。通常使用每次原始样本中没有被采样到的数据作为验证集。
Bagging code示例:
class Bagging:
def _init_(self,base_learner,n_learners):
self.learners = [clone(base_learner) for _ in range(n_learners)]
def fit(self, X, y):
for learner in self.learners:
examples = np.random.choice(np.arange(len(X)), int(len(X)), replace=True)
learner.fit(X.iloc[examples, :], y.iloc[examples, :])
def predict(self, X):
preds = [learner.predict(X) for learner in self.learners]
return np.array(preds).mean(axis=0)
Bagging适用场景:
Bagging主要降低的是方差,
特别是对于不稳定的模型(比如决策树)
在统计学习中,对于某个东西,要查看它,可以进行采样,采样一次,和采样多次取平均,均值变化很小,下降的主要是方差,采样越多,方差越小。
方差比较大的时候,通过Bagging取均值,下降的比较好。大方差的模型(又叫不稳定的模型)用Bagging比较好。
考虑一个回归问题:真实模型是f,训练的模型是h, bagging:,已知(定理):(柯西不等式),因此:
本身不是一个随机变量,是。上式可以写成:。什么时候取等号呢?当每一个h(x)都一样时,取等号,如果h(x)之间差别特别大,就不会等。因此:f(x)和h(x)差距比较大的时候,效果会更好,也就是说
实例:
决策树是不稳定的,线性回归是稳定的。
下面两个图的横坐标是模型的数量,也就是做bagging时模型的数量。纵坐标是误差。
第一幅图:当模型数量很少时,从训练误差和验证误差看,模型有点过拟合。但是随着模型的数量的增加,两条曲线都在下降。不管模型数量如何增加,验证曲线没有出现上升,并没有使偏差更大。说明改善了泛化误差三项中的一项(再来复习一下上一篇文章讲的:
泛化误差=偏差平方+方差+噪音 ),也就是说明bagging可以降低方差。
第二幅图:线性回归模型做bagging,对性能并没有任何影响。因为线性回归是稳定的。

