LoginSignup
3
3

More than 3 years have passed since last update.

sk-learnによるアンサンブル学習の実装

Posted at

アンサンブル学習について

Kaggle ensembling guide

https://mlwave.com/kaggle-ensembling-guide/
https://github.com/MLWave/Kaggle-Ensemble-Guide

交差検証

上記のように、2つ目のモデルの学習データに、1つ目のベースモデルの予測が使用される。
しかし、全ての学習・テストデータを一度に使ってしまうと、
テストデータを見たモデルを利用するので、次のモデルでオーバーフィットするリスクがある。
そのため、交差検証を行う。

交差検証の流れ

  • データを $k$ 個のブロックに分割する。
  • $i$ 番目のブロックをテストデータ、それ以外の$k - 1$個をトレーニングデータとして学習を行う。
  • 得られた $k$ 個の精度の平均値をモデルの評価値とする。

実装

from sklearn.model_selection import KFold
from sklearn.model_selection import StratifiedKFold
# 単純な交差検証の方法
kfold = KFold(n_splits=3)
print('Cross-validation scores: \n{}'.format(cross_val_score(model, X_test,y_test, cv=kfold)))
# 層化交差検証の方法
stratifiedkfold = StratifiedKFold(n_splits=3)
print('Cross-validation scores: \n{}'.format(cross_val_score(model, X_test,y_test, cv=stratifiedkfold)))

用いる学習器を用いて、1度目の学習をする。

from sklearn.ensemble import RandomForestClassifier, ExtraTreesClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.naive_bayes import GaussianNB
from xgboost import XGBClassifier
from sklearn.neighbors import KNeighborsClassifier

clfs = [RandomForestClassifier(),
        ExtraTreesClassifier(),
        GradientBoostingClassifier(),
        KNeighborsClassifier(),
        GaussianNB(),
        XGBClassifier()
       ]

clfsに学習器を配列として入れています。

作った学習器の配列を使って学習させていく。

from heamy.estimator import Regressor
from heamy.pipeline import ModelsPipeline

pipeline = ModelsPipeline(*clfs)
stack_ds = pipeline.stack(k=10, seed=seed)

stack_dsに入っているのは、2回目のメタモデルで用いるデータセット。

メタモデルを作成する

stacker = Regressor(dataset=stack_ds, estimator=LinearRegression)
results = stacker.predict()

バリデーション

results = stacker.validate(k=10,scorer=mean_absolute_error)
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3