データサイエンティスト(仮)

元素粒子論博士。今はデータサイエンティスト(仮)。

Pythonでデータ分析:機械学習の自動化

導入

何か問題を解決するにあたって機械学習を活用する場合、膨大なアルゴリズム、そのアルゴリズムに付随する多くのハイパーパラメータが存在します。分析の要件が「とにかく精度、中身は問わない」だった場合、何とかして効率的にモデルとパラメータを知りたい、という状況が起こりえます*1

そのような要件をサポートしてくれるPythonのライブラリに、auto-sklearnというものがあります。
github.com

これは、大雑把にいうと、与えられたデータを見て、scikit-learnの中から

  • 良さそうな前処理の選定
  • 良さそうなアルゴリズムの選定
  • 良さそうなハイパーパラメータの選定

を行い、これらのアンサンブルを取る、といったことをします。

f:id:tekenuko:20161002143359p:plain
まず、Meta Learningという、データの数、種類などから、どの手法がどのデータに向いているかをモデル化し、ベイズ的最適化により最適な組み合わせを探る、そしてアンサンブルをとる、という流れです。より詳しくは、以下の論文をご参照ください。
What is auto-sklearn? — AutoSklearn 0.0.2 documentation

インストール

pip経由でインストールします。まずは、auto-sklearnを使うために必要なライブラリをインストール後、auto-sklearnをインストールします。

pip install -r https://raw.githubusercontent.com/automl/auto-sklearn/master/requirements.txt
pip install auto-sklearn

注意

auto-sklearnはUbuntuで開発されたらしく、Linuxでは動作するがMacやWindowでは動かないかもしれない、とのこと。実際、自分の環境(MacOS)で最初はうまくいきませんでした。自分の場合は、gccのバージョンが古い(4.8以前)ことが原因だったようで、バージョンを4.8以降にしたら導入できました。

コードを試したいときは

例えば、auto-sklearnのページにコード例があります。これをJupyter notebookか何かにコピーして動かしてみると良いかと思います*2
What is auto-sklearn? — AutoSklearn 0.0.2 documentation

注意

やんちゃに動かすと大量のログを吐きながら膨大な計算をします*3。少ないデータ量でも2〜3時間はかかります。オプションでモデル探索の時間などをいじれるので、すぐに結果を見たいならオプションの指定を適切に行ったほうが良いでしょう。
APIs — AutoSklearn 0.0.2 documentation

所感

ローカルPCで動かすには、やっていることと処理時間の両方の観点でオーバースペック気味かなという感想です。使いどころとしては、ハイスペックな分析環境があり、かつどうしても精度がほしいといった場合かなと思います。

*1:個人としてはこういった中身の理解が介在しないことはしたくないですが、そういう要件の場合もありますので仕方ない。

*2:何かデモを載せようかと思いましたが、注意に書いた状況のためやめにしました(汗)。

*3:今もPCがものすごいうなりながら計算してます(汗)。