#はじめに
現在、Kaggleのタイタニックコンペを行っており、ちょうどPycaretというAutoMLのことを知りましので、試しに使ってみました。
Pycaretには複数のモデルをアンサンブルする機能がありましたので、それを試してみました。
単純な使い方などは、以下の記事を参照ください。
#Pycaretでのモデルアサンブル
Pycaretでは、以下の3つの方法でアンサンブル機能を提供しています。
-
アンサンブルモデル
機械学習における、「バギング」や「ブースティング」などの手法で、アンサンブル学習によるモデルを構築します。
詳しくは、以下を参照してください。
https://pycaret.org/ensemble-model/
-
ブレンドモデル
複数のモデルで予測を行い、予測スコア、予測値の多数決により最終的な予測値を出力します。
詳しくは、以下を参照してください。
https://pycaret.org/blend-models/ -
スタックモデル
複数のモデルを予測を行なった後に、どのモデルの予測値を採用するかを指定したモデルで学習する。
(2層構造で学習するイメージ)
詳しくは、以下を参照してください。
https://pycaret.org/stack-models/
今回は、ブレンドモデル、スタックモデルについて試してみました。
準備
モデル作成までのコードは、以下になります。
!pip install pycaret==2.3.1
# pycaretのインポート
from pycaret.classification import *
# 訓練データとターゲットデータのまとめ
df_train = df_train_data[['Survived','Pclass','Sex','Age','SibSp','Parch','Fare','Embarked']]
# セットアップを実施
clf = setup(data=df_train, target='Survived', session_id=1)
# モデル間の比較を実施
best_model = compare_models() # 全てのモデルを訓練し、評価する
今回は、モデル比較によって、精度が高く尚且つ、手法の異なる以下の3つのモデルを利用します。
- CatBoost Classifier
- Logistic Regression
- Random Forest Classifier
ブレンドモデル構築
# train a voting classifier on specific models
# 個々のモデルの作成
cat = create_model('catboost')
rf = create_model('rf')
lr = create_model('lr')
# 個々のモデルのチューニング
tuned_cat = tune_model(cat)
tuned_rf = tune_model(rf)
tuned_lr = tune_model(lr)
# ブレンド実施
blender_specific = blend_models(estimator_list = [tuned_cat,tuned_rf,tuned_lr], method = 'soft')
全体に精度が改善されていることが確認できました。
また、パラメータの「method」は、
soft:予測スコアの最も高いモデルの予測ラベルを予測値とする
hard:予測ラベルを多数決して、予測ラベルとする
となります。
また、estimator_list = compare_models(n_select = n)とすることで、自動的にスコアの高いモデルを採用するということもできます。
スタックモデル構築
スタックモデル構築までの処理は同じなので、割愛いたします。
今回は、ここの予測モデルとして、「catboost」、「random forrest」を選択し、予測モデルを選定するメタモデルとして、「xgboost」を選択しました。
# create individual models for stacking
cat = create_model('catboost')
rf = create_model('rf')
tuned_cat = tune_model(cat)
tuned_rf = tune_model(rf)
xgboost = create_model('xgboost')
# stacking models
stacker = stack_models(estimator_list = [tuned_cat,tuned_rf], meta_model = xgboost)
スコアが落ちる結果となりました。
特徴に合わせたモデルの選定方法なども考える必要がありそうです。
こちらも、estimator_list = compare_models(n_select = n)とすることができます。
また、meta_modelを指定しない場合は、'linear model'となるそうです。
まとめ
Pycaretを使うことで、複数モデルを利用した予測を簡易に行うことができることがわかりました。
それぞれのモデルの短所と長所を補って使うことができれば、有効に使うことができるのではないかと思います。
参考URL