第三回:Ensemble Model - Bagging (Bootstrap Aggregating)
Baggingとは
Bootstrapping(サンプル集合から復元抽出によりsub-sample setを作成)により作成したsub-sample setそれぞれに対してモデルを作成し、モデルの結果を集約して予測すること。
結果の集約はClassifierの場合は多数決、Regressionの場合は平均値をとる。
Structure
sklearn.ensemble.BaggingClassifier(base_estimator=None, n_estimators=10, *, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, oob_score=False, warm_start=False, n_jobs=None, random_state=None, verbose=0
主なParameters
Parameters | Description |
base_estimator | 一つ一つのsub-sample setに用いるモデルを選択 好みがなければDecision Treeがおすすめ(それはつまりRandom Forest..) |
n_estimators | 何個のsub-setに対してモデルを作成するか |
max_samples | 元のsampleの何割を一つのsub-sampleとして抽出するか 割合が大きすぎると過学習しがち |
n_features | sub-sampleで説明変数を何種類使うか 過学習しているときには種類を減らす |
Sample
estimatorとしてK-Neighborを使う
import pandas as pd from sklearn.ensemble import BaggingClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split from sklearn.datasets import load_breast_cancer cancer = load_breast_cancer() X= pd.DataFrame(cancer.data, columns=cancer.feature_names) y = pd.Series(cancer.target) X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.5 ,random_state = 0) models = {'kNN': KNeighborsClassifier(), 'bagging': BaggingClassifier(KNeighborsClassifier(), n_estimators=50, random_state=0)} scores = {} for model_name, model in models.items(): model.fit(X_train,y_train) scores[(model_name, 'train_score')] = model.score(X_train,y_train) scores[(model_name, 'test_score')] = model.score(X_test,y_test) pd.Series(scores).unstack()
K-Neighbor単体の場合とくらべて多少test_scoreが改善された