Introduction
色々な機械学習モデルを簡単に比較できるライブラリPycaretについて基本的な使用方法をまとめる。
今回は2値分類問題に適用する。
開発環境
- VScode/Jupyter
バージョン
- Python: 3.8.13
- pycaret: 2.3.10
参考サイト
パッケージインポート
import pycaret
from pycaret.classification import *
pycaret.__version__
データの取得
get_data()
でpycaretライブラリに用意されているcreditデータを取得
目的変数はdefault(債務不履行の有無)
使用可能なデータ一覧:pycaret/datasets
from pycaret.datasets import get_data
dataset = get_data('credit')
print(dataset.shape)
全データの10%を未知データとして用意
data = dataset.sample(frac=0.90, random_state=0)
data_unknown = dataset.drop(data.index)
data.reset_index(inplace=True, drop=True)
data_unknown.reset_index(inplace=True, drop=True)
print('Data for modeling: ' + str(data.shape)) #Data for modeling: (21600, 24)
print('Data for test: ' + str(data_unknown.shape)) #Data for test: (2400, 24)
データの前処理
set()
関数を使ってデータの前処理を実行
以下の引数が最低限必要
set(data=訓練データフレーム,target=目的変数)
session_idは乱数シード値であるため再現性を保つために設定しておくと良い
set()
関数を実行すると各説明変数のデータ型が表示される
表示内容を見て問題なければEnterキーを押す
問題がある場合はquitを入力してEnterを押す
本来ならデータ型が正しいかを判断し問題があれば引数の調整を行うが、それには経験が必要なため今回はスルー
セットアップが完了すると色々な情報が表示される
最低限以下を確認しておくと良い
- 2.Target Type: Binary(二値分類)かMulticlass(多クラス分類)かを判定
- 3.Label Encoded: 目的変数のエンコードをしたか
- 4.Original Data: データの形状を表示
- 5.Missing Values: 元データに欠損値があるかを判定
- 6.Numeric Features: 数値型の説明変数の数
- 7.Categorical Features: カテゴリー型の説明変数の数
- 11.Transformed Train Set: 訓練データの形状。ラベルエンコーディングにより変数の数が増えている。
- 12.Transformed Test Set: テストデータの形状
- 15.Fold Generator: 交差検証の方法
- 16.Fold Number: 交差検証の回数
このあと行うモデル比較ではデフォルトでは上記の15と16に表示した方法と回数で交差検証が行われる
exp = setup(data = data, target = 'default', session_id=1)
モデル比較
compare_models()
でモデルの比較を実行
デフォルトでは交差検証を10回の平均値をAccuracyが高い順に表示
最も精度が良かったモデルが返却される
best_model = compare_models()
print(best_model)
モデル作成
create_model()
を利用してモデルを作成
使用可能なモデルはmodels()
で確認可能
models()
ridge = create_model('ridge')
ridge
モデルチューニング
tune_model()
でハイパーパラメータのチューニングを実行
tuned_ridge = tune_model(ridge)
tuned_ridge
モデルプロット
plot_model()
で様々な評価グラフが確認可能
evaluate_model()
ではplot_model()
で表示可能なすべてのグラフを表示し切り替えることが可能
plot_model(tuned_ridge, plot='confusion_matrix')
evaluate_model(tuned_ridge)
テストデータの予測/ホールド・アウト法
predict_model()
でテストデータの予測精度を確認
テストデータはsetup()
メソッドで用意したデータ
交差検証の結果と乖離があれば過学習の疑いあり
predict_model(tuned_ridge)
モデル最終版を作成
finalize_model()
で全訓練データを使用しモデルを作成
final_ridge = finalize_model(tuned_ridge)
predict_model(final_ridge)
未知データの予測
事前に用意しておいた未知データに対する予測を実施
データフレーム内のLabelが予測値でscoreは確率を示す
pycaret.utils内のcheck_metric()
で評価指標の算出ができる
unknown_predict = predict_model(final_ridge, data=data_unknown)
unknown_predict
from pycaret.utils import check_metric
check_metric(unknown_predict['default'], unknown_predict['Label'], metric = 'Accuracy') # 0.8112
モデルの保存
save_model()
でモデルを保存
save_model(final_ridge, 'final_ridge')
モデルのロード
load_model()
でモデルのロード
load_model = load_model('final_ridge')
Conclusion
Pycaretの基本的な使い方を二値分類タスクを例にまとめた。
今後多クラス分類や回帰、高度な前処理などについてもまとめようと思う。
メソッド一覧
-
get_data()
データ取得 -
set()
データの前処理 -
compare_models()
モデル比較 -
models()
使用可能モデルの表示 -
create_model()
モデル作成 -
tune_model()
ハイパーパラメータチューニング -
plot_model()
モデル評価のプロット(指定する) -
evaluate_model()
モデル評価のプロット(すべて) -
predict_model()
予測値の算出 -
finalize_model()
全訓練データでモデル作成 -
check_metric()
評価指標の算出 -
save_model()
モデルの保存 -
load_model()
モデルのロード