#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.
! pip install pycaret
Google Colabを用いる場合、以下のコードを実行する事で、インタラクティブな表示をする事ができます。
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値のクラス分類となります。
from pycaret.datasets import get_data
dataset = get_data('credit')
データセットの数を確認してみます。
#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.
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を入力して終了させます。
from pycaret.classification import *
exp_clf101 = setup(data = data, target = 'default', session_id=123)
元のデータに欠損値がある場合、Trueとして表示されます。この実験では、データセットに欠損値はありませんでした。
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を使おうって感じになりますね。
compare_models()
デフォルトでは、精度の順にソートされます。
例えば、recallの順でソートしたい、5-fold交差検証をしたいというオプションを追加したい場合は、以下のコードを実行します。
compare_models(sort = 'Recall', fold = 5)
#まとめ
この記事では、モデルの比較まで行いました。
次は、モデルを作成し評価をしたいと思います。