PyInv

プログラミングのメモ、海外投資のメモ

第三回: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が改善された
f:id:singapp:20200923233527p:plain