目次
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以上担当
理化学研究所にて研究員を拝命中 応用数理学会所属