PyCaret(オープンソースの自動機械学習:AutoML)

目次

1. PyCaretとは
2. 実験:
_2.1 環境構築
_2.2 データロード
_2.3 モデル比較
_2.4 モデル作成
_2.5 モデルチューニング
_2.6 モデル評価
_2.7 モデルのデプロイ
_2.8 モデルの保存
_2.9 モデルのロード

1. PyCaretとは

PyCaretは、機械学習ワークフローを自動化するPythonのオープンソースのローコード機械学習ライブラリです。 これは、データサイエンスにおいてモデル比較を指数関数的にスピードアップし、生産性を向上させるエンドツーエンドの機械学習およびモデル管理ライブラリーです。

PyCaretのモジュールは下記になります。

– 分類 Classification
– 回帰 Regression
– クラスタリング Clustering
– 異常検出 Anomaly Detection
– 自然言語処理(NLP  Natural Language Processing)
– アソシエーションルール Association Rules
– データセット

今回の実験はバイナリ分類を実験したいと思います。

https://pycaret.readthedocs.io/en/latest/index.html

2. 実験:

環境:Google colab
データセット:UCIのmushroomキノコが食べられるか食べられないかのデータです。 e=edible,p=poisonousなどという頭文字だけのcsvデータです。
モデル:自動機械学習のPyCaratライブラリ(version:  2.2.0)

2.1 環境構築

Pycaretのライブラリをインストールします。

!pip install pycaret

colab用の設定

from pycaret.utils import enable_colab

enable_colab()

Pycaretのバージョンを表示します。

import pycaret

print(‘pycaret version: ‘, pycaret.__version__)

pycaret version:  2.2.0

2.2 データロード

ターゲットはe=edible, p=poisonousのClassesのカラムになります。特徴量は数字ではなく、略字だけで表現したデータです。

#  Binary classifcation

#  Mushroom Dataset

#  https://archive.ics.uci.edu/ml/datasets/mushroom

import pandas as pd

data_url = ‘https://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/agaricus-lepiota.data’

classes = [“Classes”, “Cap-Shape”, “Cap-Surface”, “Cap-Colour”, “Bruises”, “Odor”,

“Gill-Attachment”, “Gill-Spacing”, “Gill-Size”, “Gill-Colour”, “Stalk-Shape”,

“Stalk-Root”, “Stalk-Surface-Above-Ring”, “Stalk-Surface-Below-Ring”,

“Stalk-Colour-Above-Ring”, “Stalk-Colour-Below-Ring”, “Veil-Type”,

“Veil-Colour”, “Ring-Number”, “Ring-Type”, “Spore-Print-Colour”, “Population”, “Habitat”]

dataset = pd.read_csv(data_url, names = classes)

dataset

7,312件の学習データと812件のテストデータを分けます。

#  Train and Holdout split

data = dataset.sample(frac=0.90, random_state=786)

data_unseen = dataset.drop(data.index)

data.reset_index(inplace=True, drop=True)

data_unseen.reset_index(inplace=True, drop=True)

print(‘Data for Modeling: ‘ + str(data.shape))

print(‘Unseen Data For Predictions: ‘ + str(data_unseen.shape))

Data for Modeling: (7312, 23)

Unseen Data For Predictions: (812, 23)

2.3 モデル比較

データセットとターゲットを設定すれば、特徴量エンジニアリングが自動調整します。もちろん自分で調整をおこなうことができますが、PyCaretだと自動でおこなうことができます。

from pycaret.classification import *

exp_clf = setup(data = data, target = ‘Classes’, session_id=123, silent=True)

15つのモデルが自動で作成します。Accuracyの順番で表示しています。Random Forest ClassifierやQuadratic Discriminant Analysis等のモデルが結果だということがわかります。

best_model = compare_models()

一番よいモデルのパラメータを確認します。

print(best_model)

モデルの詳細を表示します。

models()

2.4 モデル作成

random forestモデル作成します。

rf = create_model(‘rf’)

2.5 モデルチューニング

パラメータ調整で複数モデルを作成します。

tuned_rf = tune_model(rf)

 

2.6 モデル評価

AUC Plot

AUCは1になります。

plot_model(tuned_rf, plot = ‘auc’)

Feature Importance Plot

plot_model(tuned_rf, plot=’feature’)

Confusion Matrix

plot_model(tuned_rf, plot = ‘confusion_matrix’)

まとめのモデル評価

ほぼ全てのモデルサマリーを表示できます。

evaluate_model(tuned_rf)

 

2.7 モデルのデプロイ

predict_model(tuned_rf);

最終のモデルをデプロイします。

#Final Random Forest model parameters for deployment

final_rf = finalize_model(tuned_rf)

print(final_rf)

 

predict_model(final_rf);

ホールドアウトのデータに対して確認します。

unseen_predictions = predict_model(final_rf, data=data_unseen)

unseen_predictions

ホールドアウトによるデータもよい結果になります。

from pycaret.utils import check_metric

check_metric(unseen_predictions[‘Classes’], unseen_predictions[‘Label’], metric = ‘Accuracy’)

1.0

 

2.8 モデルの保存

Final RF Model.pklのpickle ファイルを保存します。

save_model(final_rf,’Final RF Model’)

 

2.9 モデルのロード

保存したモデルをロードします。

saved_final_rf = load_model(‘Final RF Model’)

モデルを推論します。

new_prediction = predict_model(saved_final_rf, data=data_unseen)

予測結果を評価します。良い結果を確認できました。

from pycaret.utils import check_metric

check_metric(new_prediction[‘Classes’], new_prediction[‘Label’], metric = ‘Accuracy’)

1.0

 

担当者:HM

香川県高松市出身 データ分析にて、博士(理学)を取得後、自動車メーカー会社にてデータ分析に関わる。その後コンサルティングファームでデータ分析プロジェクトを歴任後独立 気が付けばデータ分析プロジェクトだけで50以上担当

理化学研究所にて研究員を拝命中 応用数理学会所属