【PyCaret入門】機械学習を自動化するライブラリ「PyCaret」を入門する

# PyCaretとは
つい先日[Announcing PyCaret 1.0.0](https://towardsdatascience.com/announcing-pycaret-an-open-source-low-code-machine-learning-library-in-python-4a1f1aad8d46)という記事を拝見しました。
面白そうなライブラリだったため、この記事では、実際にPyCaretの使い方を解説していきます。
**[PyCaret](https://pycaret.org/)とは、機械学習のモデル開発においてデータ前処理や可視化、モデル開発を数行のコードで出来てしまうPythonのライブラリです。**

PyCaretはいくつかの主要な機械学習ライブラリ（scikit-learn, XGBoost, LightGBMなど）をPythonでラッパーしたものです。
分類や回帰、クラスタリング、異常検知、自然言語処理が扱えます。
言わば、PyCaretは、DataRobotの無料版のようなイメージです。

基本的に、前処理、モデリング、性能評価、チューニング、可視化まで一通り出来るそうです。
さらに、スタッキング等も出来ます。
（時系列解析やLog lossなどの一部の評価指標がなさげです。）
[PyCaret/Github](https://github.com/pycaret/pycaret)

また、対象読者は、既にscikit-learnを用いて機械学習の一連を入門したよ！って言う方です。
（機械学習初学者だと、内容がわからなくなる可能性があります。とりあえずなんか過ごそう。。って感じで終わると思います。自社サービスで恐縮ですが、[AI Academy](https://aiacademy.jp/)などを使って、機械学習プログラミングを入門してみてください！）

PyCaretを使って、kaggleの[Credit Card Fraud Detection](https://www.kaggle.com/mlg-ulb/creditcardfraud)に取り組んだ解説動画もありますので、こちらも是非見てみてください。

# AI Academy Bootcamp

[６ヶ月35,000円にてチャットで質問し放題の環境で、機械学習やデータ分析が学べるサービス](https://aiacademy.jp/bootcamp)を提供しております。
数十名在籍しているデータサイエンティストや機械学習エンジニアに質問し放題の環境でデータ分析、統計、機械学習、SQL等が学べます。AI人材に必要なスキルを効率よく体系的に身に付けたい方は是非ご検討ください！
![bootcamp_ad_72ppi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195675/f261ccc8-42db-a292-2511-6a742d1987f7.png)
https://aiacademy.jp/bootcamp


# PyCaretをやってみよう！

まずはPyCaretのインストールです。

ターミナルやコマンドプロンプトからインストールの場合は、以下のコマンドでインストール出来ます。

```
pip install pycaret
```

Jupyter NotebookやGoogle Colabでは先頭に!をつけて以下のコマンドにてインストール出来ます。

```
!pip install pycaret
```

## 必要なモジュールの読み込み＆データの準備

今回は、irisデータセットを用いて多クラス分類をしてみます。
まずは必要なコードを読み込みます。



```py
import warnings
# 不要な警告文消すよ
warnings.filterwarnings("ignore")
# 今回の主役！PyCaretを読み込みます。
from pycaret.classification import *
# Irisデータセットを読み込みます。
from sklearn.datasets import load_iris
# データフレーム扱うのでPandasも読み込みます。
import pandas as pd
```

次に、データを準備します。

```py
iris = load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
y = pd.DataFrame(iris.target, columns=["target"])
df = pd.concat([X,y], axis=1)
```

先頭5件表示。

```py
df.head()
```

## 前処理

いざ！前処理。

**setup()**を使うと、欠損値処理、データ分割などを行なってくれます。

targetには、目的変数を渡します。

```py
exp1 = setup(df, target = 'target')
```

## モデルを比較しよう

モデルの比較は**compare_models()**を使うだけです。

```py
compare_models()
```

<img width="518" alt="スクリーンショット 2020-04-21 0.14.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195675/6299a843-aa29-0677-3558-445ba78d96a3.png">


## モデリング

[https://pycaret.org/create-model/](https://pycaret.org/create-model/)を参考にして、学習に利用するアルゴリズムの名称を入力します。
今回は、正解率が最も高かった『2次判別分析 (Quadratic Discriminant Analysis)』と決定木を利用します。
Quadratic Discriminant Analysisは、'qda'と入力すれば良いそうなので、今回はqdaと入力します。

```py
qda = create_model('qda')
```

<img width="412" alt="スクリーンショット 2020-04-21 0.14.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195675/bd3f44e5-6a94-297c-f2c3-aebc06b47837.png">



決定木も試してみましょう。

```py
tree = create_model('dt')
```

<img width="393" alt="スクリーンショット 2020-04-21 0.14.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195675/60295efc-7f99-d1d8-e904-e6dd9d49dd5e.png">


## チューニング

決定木をチューニングしてみます。

```py
tuned_tree = tune_model('dt')
```

<img width="393" alt="スクリーンショット 2020-04-21 0.14.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195675/72fd2122-f98c-db4f-96ad-f3dd34420f85.png">


## パラメータの取得

```py
tuned_tree.get_params
```

## モデルの可視化

```py
tuned_qda = tune_model('qda')
plot_model(tuned_qda)
```

![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195675/0bbe7b8e-5b6a-dfb5-9565-10feaeb802bc.png)


```py
plot_model(tuned_tree)
```


![download-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195675/f601c983-2272-689b-6175-e4dd2a5c250c.png)

## アンサンブル学習

```py
lgbm = create_model('lightgbm')
xgboost = create_model('xgboost')

ensemble = blend_models([lgbm, xgboost])
```

<img width="350" alt="スクリーンショット 2020-04-21 0.15.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195675/8af38f87-ccfa-569f-1f4f-2526f0fe65d9.png">



## スタッキング

```py
stack = stack_models(estimator_list = [xgboost], meta_model = lgbm)
```

<img width="344" alt="スクリーンショット 2020-04-21 0.15.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195675/9093fd3c-ec89-ec88-c3e8-04535f8ee34f.png">


## 予測

```py
pred = predict_model(qda)
```

はい、便利。

# 最後に

数行で、一通り出来ました。。
これから少しずつ使ってみようかと思います。

# AI Academy Bootcamp

[６ヶ月35,000円にてチャットで質問し放題の環境で、機械学習やデータ分析が学べるサービス](https://aiacademy.jp/bootcamp)を提供しております。
数十名在籍しているデータサイエンティストや機械学習エンジニアに質問し放題の環境でデータ分析、統計、機械学習、SQL等が学べます。AI人材に必要なスキルを効率よく体系的に身に付けたい方は是非ご検討ください！
![bootcamp_ad_72ppi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195675/f261ccc8-42db-a292-2511-6a742d1987f7.png)
https://aiacademy.jp/bootcamp



# 参考サイト

参考にさせて頂いた記事です。
この記事以外にも是非参考にしてみてください。

[参考記事1](https://towardsdatascience.com/announcing-pycaret-an-open-source-low-code-machine-learning-library-in-python-4a1f1aad8d46)
[参考記事2](https://qiita.com/s_fukuzawa/items/5dd40a008dac76595eea)
[参考記事3](https://techtech-sorae.com/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E8%87%AA%E5%8B%95%E5%8C%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%80%8Cpycaret%E3%80%8D%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/)

# この記事を書いた人

株式会社エーアイアカデミー
代表取締役CEO　谷 一徳
フォローお待ちしております！
[Twitter](https://twitter.com/tankazunori0914)
[Facebook](https://www.facebook.com/takazunori)
5000名以上が参加しいてるAIコミュニティも運営しております。
毎日AIに関する情報を提供しておりますので、こちらのご参加もお待ちしております！
[人工知能研究コミュニティ](https://www.facebook.com/groups/1892746874314837/)
[AI Academy](https://aiacademy.jp/)