Ensemble methods 组合模型的方式大致为四个:/bagging / boosting / voting / stacking ,今天主要简单叙述 bagging算法。
- Bagging的基本思路:
采样出T个含K个样本的采样集合,然后基于每个采样集合训练出一个基学习器,再将这些基学习器进行结合,这就是Bagging的基本流程。
Sklearn为我们提供了 BaggingRegressor 与 BaggingClassifier 两种Bagging方法的API
# evaluate bagging algorithm for classification
# define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=5)
# define the model
model = BaggingClassifier()
# evaluate the model
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
# report performance
print('Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
- 算法特点:
- 平行合奏:每个模型独立构建
- 旨在减少方差,而不是偏差
- 适用于高方差低偏差模型(复杂模型)
- 基于树的方法的示例是随机森林,其开发完全生长的树(注意,RF修改生长的过程以减少树之间的相关性)
bag_clf=BaggingClassifier(DecisionTreeClassifier(),
n_estimators=500,
max_samples=100,
bootstrap=True,
n_jobs=-1,
oob_score=True)
可以通过设置参数 bootstrap=False来切换为无放回采样。
n_estimators=500,表示有有500个相同的决策器。
max_samples=100,表示在数据集上有放回采样 100 个训练实例。
n_jobs=-1,n_jobs 参数告诉 sklearn 用于训练和预测所需要 CPU 核的数量。(-1 代表着 sklearn 会使用所有空闲核)
oob_score=True,表示包外评估,在bootstrap=True的时候,我们有放回的抽样会导致大概有37%左右的实例是未被采样的,用这些实例来对模型进行检验,将多个训练器在包外实例上的评估结果取平均值,就可以得到集成的评估。