1.11.1. Bagging meta-estimator
(鉴于本人觉得中文文档中的部分翻译不够清晰,所以修改如下)
在集成算法中,bagging 方法形成一类算法,它在原始训练集的随机子集上构建黑盒估计器的多个实例,然后将它们各自的预测集合起来形成最终预测。这些方法被用来作为一种减少基本估计量(例如,一个决策树)的方差的方法,方法是在其构造过程中引入随机化,然后将其做成一个集合。在许多情况下,bagging 方法是相对于单个模型进行改进的一种非常简单的方法,不需要修改底层的基本算法。因为它们提供了一种减少过拟合的方法,所以bagging 方法在强而复杂的模型(如完全开发的决策树)中工作得最好,而在弱模型(如浅决策树)中工作得最好的方法是增强方法。
bagging 方法有多种风格,但它们之间的区别主要在于它们随机抽取训练集的子集的方式:
- 如果抽取的数据集的随机子集是样例的随机子集,那么这种算法称为Pasting。
- 如果样例抽取是有放回的,那么这种算法称为 Bagging。
- 如果抽取的数据集的随机子集是特征的随机子集,那么这种算法称为Random Subspaces。
- 最后,如果基估计器构建在样例和特征两者的子集之上时,那么这种算法称为Random Patches。
在 scikit-learn 中,bagging 方法使用统一的 BaggingClassifier 元估计器(或者 BaggingRegressor ),基估计器和随机子集抽取策略由用户指定。max_samples 和 max_features 控制着子集的大小(对于样例和特征), bootstrap 和 bootstrap_features 控制着样例和特征的抽取是有放回还是无放回的。 当使用样本子集时,通过设置 oob_score=True ,可以使用袋外(out-of-bag)样本来评估泛化精度。下面的代码片段说明了如何构造一个 KNeighborsClassifier 估计器的 bagging 集成实例,每一个基估计器都建立在 50% 的样本随机子集和 50% 的特征随机子集上。
from sklearn.ensemble import BaggingClassifier
from sklearn.neighbors import KNeighborsClassifier
bagging = BaggingClassifier(KNeighborsClassifier(),
max_samples=0.5, max_features=0.5)