5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pycaretチュートリアル_二値分類

Last updated at Posted at 2022-11-12

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)
Out:

dataset.PNG

全データの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)
Out:

exp1.PNG

exp2.PNG

モデル比較

compare_models()でモデルの比較を実行
デフォルトでは交差検証を10回の平均値をAccuracyが高い順に表示
最も精度が良かったモデルが返却される

best_model = compare_models()
print(best_model)
Out:

compare_model.PNG

モデル作成

create_model()を利用してモデルを作成
使用可能なモデルはmodels()で確認可能

models()
Out:

model.PNG

ridge = create_model('ridge')
ridge
Out:

create_model.PNG

モデルチューニング

tune_model()でハイパーパラメータのチューニングを実行

tuned_ridge = tune_model(ridge)
tuned_ridge
Out:

tune_model.PNG

モデルプロット

plot_model()で様々な評価グラフが確認可能
evaluate_model()ではplot_model()で表示可能なすべてのグラフを表示し切り替えることが可能

plot_model(tuned_ridge, plot='confusion_matrix')
Out:

plot.png

evaluate_model(tuned_ridge)
Out:

eval.PNG

テストデータの予測/ホールド・アウト法

predict_model()でテストデータの予測精度を確認
テストデータはsetup()メソッドで用意したデータ
交差検証の結果と乖離があれば過学習の疑いあり

predict_model(tuned_ridge)
Out:

pred.PNG

モデル最終版を作成

finalize_model()で全訓練データを使用しモデルを作成

final_ridge = finalize_model(tuned_ridge)
predict_model(final_ridge)
Out:

pred_final.PNG

未知データの予測

事前に用意しておいた未知データに対する予測を実施
データフレーム内のLabelが予測値でscoreは確率を示す

pycaret.utils内のcheck_metric()で評価指標の算出ができる

unknown_predict = predict_model(final_ridge, data=data_unknown)
unknown_predict
Out:

pred_un.PNG

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') 
Out:

save.PNG

モデルのロード

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() モデルのロード
5
6
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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?