Python AutoML ライブラリ TPOTを用いた、自動機械学習のサンプルコード解説

データサイエンス

 今回は、手軽にAutoMLが実行できるラブラリTPOTのサンプルコードを初心者の方向けに紹介します。似たライブラリである、Pycaretに比べて知られていませんが、個人的には、実業務で現実的に運用できるライブラリとしては、TPOTがおすすめです。

自動機械学習ライブラリTPOTとは

 機械学習で精度の高い答えを導き出すためには、適切な特徴量の前処理、特徴量の選択、特徴量の加工、機械学習時のハイパーパラメータチューニングが必要となります。

 これらを、自動で行うツールやサービスをAutoML(自動機械学習)といいます。

AutoMLで有名な有償ツールは、Datarobotなどがあります。また、無償のPythonライブラリとしては、Pycaretが有名です。ご存じの方も多いと思います。

 今回は、有名ではないですが、個人的におすすめAutoML無償ライブラリのTPOTのサンプルコードを紹介します。

例えば、簡単な課題に対しては、複雑なモデルを使わずに、きっちり線形モデルを使うなど、使用感として、経験とあった方法を導き出します。

※pycaretに興味のあるかたは、こちらも参考になさってください。↓↓

サンプルコードを日本語でわかりやすく説明PyCaret、簡単に複雑な機械学習処理が可能なAutoML(自動機械学習)
機械学習プロジェクトにおいて、AutoMLが主流になりつつあります。自動機械学習で最も有名な,、PyCaretの使い方について、初心者向けに、tutorial(102)に、わかりやすい解説を加えて説明します。サンプルコードの解読がめんどくさいという方必見です。

サンプルコード解説

今回紹介するサンプルコードはこちらです。iris(アヤメの)分類問題ですね。

Examples - TPOT
Documentation for TPOT, a Python Automated Machine Learning tool that optimizes machine learning pipelines using genetic...

もう少し詳しく書かれているページはこちらです。

tpot/tutorials/IRIS.ipynb at master · EpistasisLab/tpot
A Python Automated Machine Learning tool that optimizes machine learning pipelines using genetic programming. - Epistasi...

データの準備 学習

from tpot import TPOTClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import numpy as np

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data.astype(np.float64),
    iris.target.astype(np.float64), train_size=0.75, test_size=0.25, random_state=42)

tpot = TPOTClassifier(generations=5, population_size=50, verbosity=2, random_state=42)
tpot.fit(X_train, y_train)
print(tpot.score(X_test, y_test))
tpot.export('tpot_iris_pipeline.py')
  • 1行目 tpotの分類器
  • 2行目 sikit-learnのirisデータ インポート
  • 3行目 scikit-learnのテストデータと学習データを分けるもの インポート
  • 4行目 numpyインポート
  • 6行目 irisデータをよみこみます
  • 7~8行目 データを学習用と推論ように分けます。 
    • train_size=0.75 学習データは75%
    • test_size=0.25 テストデータは25%
    • iris.data データ特徴量の方です。numpyのfloat形式に変換してます
    • iris.target データのラベルの方です。numpyのfloat形式に変換してます
  • 10行目 TPOTのAutoMLの設定です。(遺伝的アルゴリズムで最適化を行っています)。サンプルコードでは、50パターン(population)を、5回(generation)計算しています。全部で、250
    • generation 最適化を行う世代数の設定です。
    • population_size 1世代のサンプル数です。
  • 11行目 TPOTで学習します
  • 12行目 学習結果を表示します。
  • 13行目 結果を保存します。前処理から、予測までるまで pyファイルのコードとして保存されます。

最適化して保存したスクリプト

上記で保存されたコード(前処理と推論のスクリプト)はこちらです。自動で作成されますよ!

irisはシンプルなデータなので、機械学習アルゴリズムはシンプルな決定木が選ばれています。

前処理で、RBFサンプラーを用いることは、なかなか思いつかないですね。。。

# %load tpot_iris_pipeline.py
import numpy as np
import pandas as pd
from sklearn.kernel_approximation import RBFSampler
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.tree import DecisionTreeClassifier

# NOTE: Make sure that the outcome column is labeled 'target' in the data file
tpot_data = pd.read_csv('PATH/TO/DATA/FILE', sep='COLUMN_SEPARATOR', dtype=np.float64)
features = tpot_data.drop('target', axis=1)
training_features, testing_features, training_classes, testing_classes = \
            train_test_split(features, tpot_data['target'], random_state=None)

exported_pipeline = make_pipeline(
    RBFSampler(gamma=0.8500000000000001),
    DecisionTreeClassifier(criterion="entropy", max_depth=3, min_samples_leaf=4, min_samples_split=9)
)

exported_pipeline.fit(training_features, training_classes)
results = exported_pipeline.predict(testing_features)
  • 1~2行目 numpyとpandasのインポート
  • 4行目 RBFサンプラーという前処理ツールをインポート(最適化であった前処理アルゴリズム)
  • 7行目 決定木をインポート(最適解であった機械学習アルゴリズム)
  • 10行目 推論対象のデータを読み込みます。”PATH/TO/TO/DATA/FILE”に、適用したいデータファイルのパスを設定します。
  • 11行目 データの中で、推論対象のラベルを指定します
  • 12行目~13行目 データを、学習用の特徴量、テスト用の特徴量、学習用のラベル、テスト用のラベルに分けます。(学習用とテストように分けるところですね)
  • 15行目~17行目 前処理から機械学習のパイプライン処理を作成します。前処理がRBFsampler、機械学習がDecisiontTreeです。
    RBFsamplerの引数gammaはRBFカーネルのパラメータです。(初心者のかたは読み飛ばしてください)
    DecitionTreeの引数、criterionは決定時の評価指標、max_depthは木の深さの最大値、min_samples_leafは、葉の数の最小値、min_sample_splitは分岐の数の最小値。
  • 20行目 今回のデータで学習します
  • 21行目 テストデータで予測します。

まとめ

初心者の方向けに、自動機械学習ライブラリ TPOTのサンプルコードを紹介しました。

比較的簡単に実装できますので、ぜひ試してください。

数日前、TPOT2のアルファ版がリリースされています。こちらの進化具合もたのしみですね。

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