TPOT(Code Reading)|Implementing Original AutoML #1

f:id:lib-arts:20190108212205j:plain

機械学習の文脈においてここ最近AutoMLが注目されています。
AutoMLは機械学習のモデルを自動的に作るという考え方です。
実際に自作してみることでパラメータチューニングなどの勘所をつかもうというのがこのシリーズでの目標とします。

しばらくは情報収拾も兼ねて実際の実装例を動かしたり読んだりしてみようということで、#1ではTPOTについて1. リポジトリのページからTPOTの概要について読み取り、2.インストール関連のドキュメントからインストールの方法のご紹介とサンプルコードの実行、3.その他のAutoMLライブラリについてご紹介について取り扱えればと思います。

以下目次になります。

 

1. TPOTの概要に関して
2. インストールの方法のご紹介とサンプルコードの実行に関して
3. TPOT以外のAutoMLについて
4. まとめ&考察

 


1. TPOTの概要に関して

GitHub - EpistasisLab/tpot: A Python Automated Machine Learning tool that optimizes machine learning pipelines using genetic programming.

上記がTPOTのGitHubリポジトリです。

 

TPOTの概要ですが、リポジトリのページからの抜粋を簡単に和訳したのち補足できればと思います。

f:id:lib-arts:20190114174102p:plain

TPOT is a Python Automated Machine Learning tool that optimizes machine learning pipelines using genetic programming. TPOT will automate the most tedious part of machine learning by intelligently exploring thousands of possible pipelines to find the best one for your data.

和訳:『TPOTは遺伝的アルゴリズムを用いて機械学習のpipelinesを最適化するPythonのAutoMLのツールである。TPOTは機械学習において最もうんざりな部分を、何千もの考えられうるpipelinesから賢く探索しデータに最も適したpipelineを見つけることによって自動化する。』
遺伝的アルゴリズムはトラディッショナルな最適化のアルゴリズムです。モデルやパラメータの選択にあたって様々な処理過程があり、その選択をpipelines(処理の流れの隠喩)とした際に最適なpipelineを導出するということをAutoMLと呼んでいます。画像はリポジトリから引っ張ったTPOTの処理のイメージを図式化されている画像です。

 

Once TPOT is finished searching (or you get tired of waiting), it provides you with the Python code for the best pipeline it found so you can tinker with the pipeline from there. TPOT is built on top of scikit-learn, so all of the code it generates should look familiar... if you're familiar with scikit-learn, anyway.

和訳:『TPOTが探索を終えるか待つのに飽きて終了させたタイミングで、最適なpipelineのPythonコードを得ることができ、さらにそのコードを好きにカスタマイズすることが可能である。TPOTはscikit-learnに基づいて構築されているため、もしscikit-learnを読み慣れているなら慣れ親しんだコードを確認することができる。』
TPOTの出力としてはモデルというよりも、学習用のコードであり、そのため出力コードをさらにカスタマイズすることが可能です。R&D的な視点から考えた際にあまりブラックボックスになると望ましくないので、このようにコードを出力してくれる形はアウトプットとしてなかなかありがたい印象です。

 

上記がTPOTの簡単な概要になります。TPOTにデータセットを与えることで、自動的にモデルやパラメータの最適パス(pipeline)を元に実装されたscikit-learnを出力してくれます。

 

・TPOTのインストールと実行に関して

Installation - TPOT

TPOTのインストールについては上記のドキュメントにまとまっています。

$ pip install tpot

pipで管理している場合基本的には上記のpip installでインストールすることが可能です。詳細についてはドキュメントの方をご確認ください。

また、簡易実行に関してはリポジトリ上にサンプルコードが載っているので一番上に載っているClassificationのサンプルコードを抜粋します。

from tpot import TPOTClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split

digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target,
train_size=0.75, test_size=0.25)

tpot = TPOTClassifier(generations=5, population_size=20, verbosity=2)
tpot.fit(X_train, y_train)
print(tpot.score(X_test, y_test))
tpot.export('tpot_mnist_pipeline.py')

インストールがうまくいっていたら上記のコードでTPOTを実行することができます。

 

3. TPOT以外のAutoMLについて

https://www.automl.org/book/
上記にAutoMLについて色々とまとまっているようです。
TPOTはChapter8にまとまっています。

・Auto-WEKA[Chapter4]
・Hyperopt-Sklearn[Chapter5]
・Auto-sklearn[Chapter6]
・Auto-Net[Chapter7] etc

上記のように様々なライブラリについての情報がまとまっているようです。
https://www.automl.org/wp-content/uploads/2018/12/tpot.pdf
ちなみにTPOTの詳細は上記のようで、こちらについては時間のある際に一度読んでみれればと思います。


4. まとめ&考察

#1ではAutoMLの具体例としてTPOTの紹介と、それ以外のAutoMLについて俯瞰してみました。
#2ではTPOTの内部実装の読解メモをまとめようと思っていたのですが、3節で話題にあがったサイトのpdfから先に進めてAutoML全体を俯瞰していく方が良さそうなので、pdfの読解のまとめから進めていければと思っています。