sklearn中的Bagging

Reading time ~1 minute

1.介绍

bagging和boosting都属于ensemble家族。

  • 平均方法:构建各个独立的estimator,对结果求平均。其目的为了减小variance。例如:bagging、随机森林
  • boosting方法:estimator按顺序构建,一层又一层,其目的是为了减小bias。例如:AdaBoost、GBDT

BAGging是Bootstrap Aggregation的简称。我们简单回顾下bagging的核心思想。

  • 1.Aggregation: 也是利用分散的多组模型进行组合
  • 2.Bootstrap拔靴法:有放回重复抽样 => 得到多组训练样本
  • 3.分类问题=> 投票voting;回归问题:求平均

在ensemble算法中,bagging方法从原始训练集进行随机抽样生成训练子集,并根据不同的训练子集构建不同的黑盒(black-box)的评估器(estimator),最后再对这些estimator的不同预测结果进行aggregate得到最终的预测值。该方法通过引入随机化,用来降低基础评估器(base estimator,比如:决策树)的variance。在许多case中,bagging是一种很简单的方法用来提升单独模型的效果,不需要放弃底层的base算法。同样是为了减小overfitting,bagging在强分类器和复杂模型之上构建时效果更佳(比如:深层决策树 Deep DT),而boosting则在弱模型之上效果更好(比如:浅层决策树 Shallow DT)。

不同的随机抽取子训练集的方法在Bagging方法会有很大差别:

  • 1.Pasting:如果抽取的数据集的随机子集是sample的子集时,称为Pasting
  • 2.Bagging: 如果样本抽取是放回的,则为Bagging
  • 3.Random Subspace:如果抽取的数据集的随机子集是feature的子集,则为Random Subspace
  • 4.Random Patches:当评估器构建在sample和feature的子集之上时,为Random Patches

在sklearn中,bagging方法使用统一的BaggingClassifier元评估器(或者BaggingRegressor),输入的参数及策略由用户指定。max_samples和max_features控制着子集的size,当bootstrap和bootstrap_features控制着sample和feature是放回抽样还是不放回抽样。当使用样本子集时,通过设置oob_score=True,泛化错误可以使用out-of-bag样本来评估。

示例:一个base estimator使用KNeighborsClassifier的bagging ensemble方法。

在上一节中,我们讲了一个cart的示例,接下去我们在那个的基础之上做些改动,将它改成一个base estimator基于cart的Bagging分类器: