集成学习之 Bagging & Pasting

Contents

一、 背景

前面我们谈到了VotingClassifier,从投票角度进行集成学习。我们有很多的机器学习算法,但从投票角度看,这些模型数量还远远不够,我们如果希望得到一个更好的结果话,需要更多的投票结果。这就是我们在概率论中学到过的大数定理。

因此我们要创建更多的子模型,集成更多子模型的意见,子模型性之间还不能一致,那么怎么创建呢?前面我们从模型出发,在这里我们就要数据集的角度出发了

每个子模型只看样本数据的一部分。

二、 举个例子

例如:一共有500个样本数据,每个子模型只看100个样本数据的一部分。 分析:

  1. 相应的每个子模型所使用的算法可以是共同的一个算法,因为数据有差异,所以训练出的子模型也是有差异性的
  2. 同时,每个子模型的准确率会降低
  3. 然而集成学习的每个子模型不需要太高的准确率

如果每个子模型只有 51% 的准确率

  • 如果我们只有一个子模型,整体准确率:
  • 如果我们只有3个子模型,整体准确率:
  • 如果我们只有500个子模型,整体准确率:

如果每个子模型的准确率为60%。那么500个模型的整体准确率为

三、Bagging & Pasting

取样方式

  • 放回取样:Bagging
  • 不放回取样:Pasting

Bagging相对优势:

  • 数量多
  • 不那么强烈依赖于随机,降低了随机过程带来的问题

四、实例

我们以决策树模型为例,每个子模型看100个样本数据,采用放回取样,在这里并不进行调参,仅进行简单的训练。

1. 500 个子模型

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split

# 数据准备
X, y = datasets.make_moons(n_samples=500, noise=0.3, random_state=42)

# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42) 

# 决策树更容易产生差异相对比较大的子模型,里面有很多参数、很多剪枝方式。
# 集成成百上千的子模型,首选决策树
# 集成模型个数 n_estimators=500, 每个模型看多少样本数据 max_samples=100, 放回取样bootstrap=True
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier

bagging_clf = BaggingClassifier(DecisionTreeClassifier(),
                           n_estimators=500, max_samples=100,
                           bootstrap=True)
bagging_clf.fit(X_train, y_train)
bagging_clf.score(X_test, y_test)

输出:

0.91200000000000003

2. 5000个子模型

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier

bagging_clf = BaggingClassifier(DecisionTreeClassifier(),
                           n_estimators=5000, max_samples=100,
                           bootstrap=True)
bagging_clf.fit(X_train, y_train)
bagging_clf.score(X_test, y_test)

输出

0.92000000000000004

五、小结

从上面实例也可以看出,子模型数量越多,最终的准确率会越高,当然消耗的资源也更多。 在具体的学习过程中,不管怎样,都和样本数据相关的,如果样本数据本身存在噪音或错误的话,我们依然会犯错误,当然可以继续调参以获取更好的结果。

Further Reading

[1] 1.11.1. Bagging meta-estimator


转载请注明:yezuolin的博客 » 点击阅读原文