無料で使えるAutoML【PyCaret】の使い方を解説

AutoML

機械学習に興味がある人は、AutoMLという言葉を聞いたことがあるのではないでしょうか。

AutoMLはその名の通り、機械学習の自動化をしてくれるライブラリで、Jupyter notebookやGoogle Colab上でも動作します。

今回はそんなAutoMLの中でも、無料で使用することができる「PyCaret」をご紹介します。

PyCaretの使い方を解説

PyCaretのメリット、デメリット

PyCaretの一番のメリットは、何といってもソースコードの量が格段に減ることです。

公式の動画でも強調していますが、たった数行のコードでデータの前処理から、モデルの作成と比較、ハイパーパラメータのチューニング、交差検証、予測までを実行することができます

PyCaret Announcement

ためしに、KaggleのTitanicでPyCaretを使ってみたところ、たった11行のコードでSubmitが完了してしまいました

以前に私が作成したランダムフォレストのコード(24行)より、スコアも上がりました…。

私の感じたデメリットとしては、どうしても多くのモデルを比較したり、パラメータのチューニングをするのに処理時間がかかることですね。

ただ、処理時間の短縮をするために工夫することは可能です。

PyCaretのインストール

さて、PyCaretの使い方を具体的に説明していきます。

まずは、PyCaretをインストールします。

!pip install pycaret

2021年7月時点で、PyCaretの最新バージョンは2.3.2です。

最新の情報は公式のSlackのannnoucementsのチャンネルをチェックしてみてください。

ライブラリのインポート

次に、PyCaretのライブラリをインポートします。

分類問題はpycaret.classificationを、回帰問題pycaret.regressionをインポートします。

※ついでにpandasもインポート

import pandas as pd
from pycaret.classification import *
import pandas as pd
from pycaret.regression import *

今回は、回帰問題を例にして進めてみます。

データセット読み込み

Kaggleが用意しているデータセットから、タイタニックのデータを読みだします。

※タイタニックコンペへの参加方法はこちらを参照ください。

train = pd.read_csv("/kaggle/input/titanic/train.csv")
test = pd.read_csv("/kaggle/input/titanic/test.csv")
train.head(1)

このデータにおけるターゲットはSurvivedです。性別や年齢などのデータから、その人が生存したかどうかを予測するデータセットになります。

PyCaretのセットアップ

PyCaretのsetupコマンドで、訓練データ、ターゲットを指定します。

session_idを指定すると乱数のシードを固定し、再現性を保つことができます。

setupを実行すると、PyCaretが各カラムのデータ型を推定してくるので、確認して問題がなければEnterを押して処理を続けます。

setup(data=train, target='Survived', ignore_features=['PassengerId', 'Name']
, session_id=1, silent=True)

PyCaretの推定した型が間違っていた場合は、 numeric_featuresやcategorical_featuresで型を指定してやる必要があります。

型の確認が終わって以降にsetupを実行するときは、silent=Tureを指定しておくと、型の確認をスキップできます。

それ以外にも、Kaggle notebookをSaveをするときなど、silent=Tureにしておくと便利でした。

モデルの性能比較

続いて、約20種類のモデルの性能比較を自動的に行います。

データはデフォルトで70%が訓練データに、残り30%が評価データに分割されます。

ここで返り値にbest_modelを指定していますが、このbest_modelには、性能比較の結果accuracyが一番優れていたモデルが格納されます。

best_model = compare_models()

sortで指標を指定すると、その指標の性能順に並べ替え、一番性能がいいものをbest_modelに格納することができます。

best_model = compare_models(sort='AUC')

モデルの確定

次に、compare_modelsで比較して一番性能のよかったモデルで確定します。

さきほどはデータの70%である訓練データで学習を行っていましたが、finalize_modelでは全データを使って学習を行います。

finalized_model = finalize_model(best_model)

予測

モデルを確定したので、テストデータを使って予測を行います。

prediction = predict_model(finalized_model, data=test)

サブミット

最後に、予測したデータをサブミットするためのデータを作成してみましょう。

submission = pd.DataFrame({
        'PassengerId': test.PassengerId,
        'Survived': prediction.Label
    })
submission.to_csv('submission.csv', index=False)

こちらを提出したところ、パブリックスコアは77%となりました。

PyCaretは手軽にテーブルデータの解析、予測を行うのに非常に優れたライブラリです。すべての機械学習モデルについて勉強をしていなくても、数多くのモデルから最適なものを選択してくれるのがいいですね。

以上、最後までお読みいただきありがとうございました。

コメント

タイトルとURLをコピーしました