3
10

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 3 years have passed since last update.

たった数行で機械学習体験(前編)。PyCaretを詳しく解説。データセット準備から複数モデルの精度比較まで。

Last updated at Posted at 2020-05-03

#unseen dataに関して
PyCaretを勉強していると、unseen dataをテストデータと勘違いしそうですが、unseen dataはテストデータではあるのですが詳しく説明すると、

トレーニングデータで予測モデルを作成
トレーニングデータにテストデータを組み合わせて最終予測モデルを作成
最後に、そのモデルにunseen dataを入力して、モデルの精度を確認

という流れになります。

#はじめに
2020年4月16日にオープンソースのPython機械学習ライブラリ"PyCaret 1.0.0"がリリースされたので、pipでインストールしてみます。

PyCaretは、欠損値の補完やハイパーパラメータの調整などが自動で行われる。なので、機械学習のステップが数行で実現してしまう事が特徴。機械学習の中身に詳しくなくても、簡単にモデルを作成し比較できます。

Binary Classification Tutorial (CLF101) - Level Beginnerを参考にして、Google Colabを使って実装してみます。

#PyCaretのインストール
Google ColabかAzure Notebooksでは、以下のコードでインストールします。

執筆時点のversionは、1.0.0です。
1.0.1では、compare_modelsでトレーニングされたモデルを返す予定みたい。

Return models from compare_models. Currently compare_models() donot return any trained model object.

code.py
! pip install pycaret

Google Colabを用いる場合、以下のコードを実行する事で、インタラクティブな表示をする事ができます。

code.py
from pycaret.utils import enable_colab
enable_colab()

#データセットの準備
Pycaretは、いくつかのデータセットを用意してくれており、get_data()で使用できます(インターネットに接続している必要があります)。

使えるデータセットは、pycaret/datasets/に格納されており、多クラス分類だとワインの等級やアヤメ、バイナリ分類だと、がんや心臓病が挙げられます。

チュートリアルでは、台湾において、2005年4月から9月までのクレジットカードの支払情報データセットを使っており、性別、最終学歴、結婚の有無、過去の支払い状況、これまでの支払い履歴や請求明細などが含まれます。

Target Columnは、Default payment (1=yes, 0=no)になるので、バイナリ分類になります。バイナリ分類とは、合格か不合格か、陽性か陰性かの2値のクラス分類となります。

code.py
from pycaret.datasets import get_data
dataset = get_data('credit')

image.png

データセットの数を確認してみます。

code.py
#check the shape of data
dataset.shape

結果

(24000, 24)

次に、5%をUnseen Dataにします。このデータセットでは、1200のデータが予測モデルの作成には使用されません。チュートリアルをみると、トレイン/テストの分割と混雑しないでくださいとあります。(訓練データとテストデータの分割は、setup()の関数で行います。)

This should not be confused with a train/test split as this particular split is performed to simulate a real life scenario.

code.py
data = dataset.sample(frac=0.95, random_state=786)
data_unseen = dataset.drop(data.index).reset_index(drop=True)
data.reset_index(drop=True, inplace=True)

print('Data for Modeling: ' + str(data.shape))
print('Unseen Data For Predictions: ' + str(data_unseen.shape))

結果

Data for Modeling: (22800, 24)
Unseen Data For Predictions: (1200, 24)

#PyCaret環境のセッティング
setup()で、PyCaretの環境を初期化します。
setup()では、2つの必須パラメータがあり、pandasデータフレームと、ターゲット列の名前の設定です。他のパラメータはオプションになります。今回は、session_idを指定しています。これは、再現性をもたせる為に使います。指定しない場合は、疑似乱数が発行されます。

setup()実行後は、データ型を自動的に推論します。常に正しく推論されるとは限らないので、setup()実行後は、特徴量と推測されたデータ型が表示されます。全てのデータ型が正しく識別された事を確認したら、Enterキーを押して続行するか、quitを入力して終了させます。

code.py
from pycaret.classification import *
exp_clf101 = setup(data = data, target = 'default', session_id=123)

元のデータに欠損値がある場合、Trueとして表示されます。この実験では、データセットに欠損値はありませんでした。

image.png

Sampled Data (22800, 24)
Transformed Train Set (15959, 90)

に注目してみます。
訓練用のデータセットの特徴量は、元のデータセットの特徴量から増えている事が分かります。
これは、自動的にカテゴリ変数にしたからです。

Categorical Features 9

となっており、この9つの特徴量がカテゴリ変数に変換されました。
ここまで自動でやってくれるのは本当にすごいですね。

訓練データは70%、テストデータを30%にしたので

Sampled Data (22800, 24)
Transformed Train Set (15959, 90)
Transformed Test Set (6841, 90)

このような分割になります。

#モデルの比較

ライブラリ内のすべてのモデルでトレーニングし、10-fold交差検証を用いて、精度や再現性、F1スコアを計算し、比較する事ができます。
例えば、F1scoreを重要視する場合は、LightGBMを使おうって感じになりますね。

code.py
compare_models()

デフォルトでは、精度の順にソートされます。

image.png

例えば、recallの順でソートしたい、5-fold交差検証をしたいというオプションを追加したい場合は、以下のコードを実行します。

code.py
compare_models(sort = 'Recall', fold = 5)

image.png

#まとめ
この記事では、モデルの比較まで行いました。
次は、モデルを作成し評価をしたいと思います。

3
10
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
3
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?