集成学习之 OOB 和关于 Bagging 的更多讨论

Contents

一、 背景

在这里,我们进行关于Bagging讨论,有限次放回取样导致一部分样本很有可能没有取到,所以我们需要进行讨论。

二、 OOB(Out - of - Bag)

定义:放回取样导致一部分样本很有可能没有取到,这部分样本平均大约有 37% ,把这部分没有取到的样本称为 oob 数据集 根据这种情况,不对数据集进行 train_test_split,也就是直接使用这部分没有取到的样本做测试 / 验证;

三、实例

集成模型个数 n_estimators=500, 每个模型看多少样本数据 max_samples=100, 放回取样bootstrap=True,放回取样的过程中记录下取出了哪些oob_score=True

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

bagging_clf = BaggingClassifier(DecisionTreeClassifier(),
                               n_estimators=500, max_samples=100, 
                               bootstrap=True, oob_score=True)
bagging_clf.fit(X, y)
bagging_clf.oob_score_

输出

0.9180000

四、并行

集成学习的思路极易进行并行化处理,在这里需要对参数 n_jobs 进行确认: n_jobs = n:程序就会使用服务器的 n 个核,同时进行处理;
n_jobs = -1:使用电脑所有的核;
使用单核

%%time
bagging_clf2 = BaggingClassifier(DecisionTreeClassifier(),
                               n_estimators=500, max_samples=100, 
                               bootstrap=True, oob_score=True)
bagging_clf2.fit(X, y)

使用所有核

%%time
bagging_clf2 = BaggingClassifier(DecisionTreeClassifier(),
                               n_estimators=500, max_samples=100, 
                               bootstrap=True, oob_score=True)
bagging_clf2.fit(X, y)

五、对Bagging 的更多讨论

我们之前让子模型产生差异的方式是让针对样本的随机取样。
在这里,我们针对特征随机取样来产生差异(样本特征特别多,比如图像识别领域)

  1. Random Subspaces(随机子空间),每次取样相当于在一个子空间取样。

  2. Random Patches 方式:即针对样本数量,又针对特征进行取样;

BaggingClassifier() 的参数:

  • bootstrap = True:表示采用放回的方式对样本进行取样;
  • n_estimators=500: 生成500个样本
  • max_samples=100:表示每次取 100 个样本;
  • bootstrap_features=True:表示采用放回取样的方式对特征进行取样;
  • max_features=1:每次给样本取 1 个特征; image1

在这里,我们特征数太少,只有两个,所以max_features=1,仅进行示例

1. random_Subspaces_clf

random_subspaces_clf = BaggingClassifier(DecisionTreeClassifier(),
                               n_estimators=500, max_samples=500, 
                               bootstrap=True, oob_score=True,
                               n_jobs=-1, max_features=1, bootstrap_features=True)
random_subspaces_clf.fit(X, y)
random_subspaces_clf.oob_score_

输出

0.8120000

2. random_patches_clf

random_patches_clf = BaggingClassifier(DecisionTreeClassifier(),
                               n_estimators=500, max_samples=100, 
                               bootstrap=True, oob_score=True,
                               n_jobs=-1, max_features=1, bootstrap_features=True)
random_subspaces_clf.fit(X, y)
random_subspaces_clf.oob_score_

输出

0.8599999

六、小结

在这部分,我们对Bagging放回取样进行了更深入的分析,首先对oob 数据集进行讨论,然后简单介绍了并行化参数,最后对特征空间进行采样进行了介绍,从而产生了 random_Subspaces 和 random_patches 两种方式。


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