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

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

Pythonでデータ分析:Auto-sklearnについてのメモ

導入

最近、Meta Learningという考えに少し興味を持ちました。もともとは認知科学発祥の考えですが、機械学習の文脈だと

ある決まったバイアス,すなわち仮説空間の中から,事例に応じて,適切な仮説を獲得する普通の学習器をベース学習器という.その上位で,学習対象のタスクやドメインに応じて,学習器のバイアスを決定するためのメタ知識を獲得するのがメタ学習 (meta learning).

メタ学習 - 機械学習の「朱鷺の杜Wiki」
という概念のようです。ざっくりいうと、学習のためのメタな学習規則を学習する(Learning to learn)という感じなのかなと思います。

このMeta Learningですが、機械学習の自動化、つまりあるデータセットを投入すると「良い」機械学習モデルを自動で作成すること、とも関係しているようです。こういった背景のもと、そういえばAuto-sklearnってMeta Learningが取り入れられていなかったっけ、とふと思い出し、中の仕組みって大まかにどうなっているんだろうというのが気になりました。そういった経緯で、Auto-sklearnのベースになった論文を調べてみたメモを、備忘録として記事に残しておくことにしました。

Auto-sklearn

Auto-sklearnは自動で機械学習のモデルを構築してくれるPythonのライブラリです。
github.com

ざっくりした概要やインストール方法は、過去に自分が紹介していたようです。
tekenuko.hatenablog.com
この記事を見ると、詳しくは以下のページといって実質元論文に投げてしまってます。過去の自分はしょうもないことやってるな。

Auto-sklearnのベース論文

Auto-sklearnの仕様やパフォーマンスが紹介されている論文は、以下のNIPS 2015での論文です。
papers.nips.cc
概要はこれを見ると載っているのですが、細かい話は「Supplementary MaterialのTableやFigにある」という記載が度々見られます。Supplement Materialってなんだろうと思ってネット検索をしてみると、以下の文献がヒットします。どうやらこれがSupplementary Materialのようです。
https://pdfs.semanticscholar.org/699c/12c4b47b7dff4c9ae9b22b9326ae9a1dacca.pdf

Auto-sklearnの概観

Auto-sklearnの全体感は以下になります。
f:id:tekenuko:20171212230243p:plain
Auto-sklearnの自動化部分は図の「AutoML system」になります。大まかな構造は以下のようになっています。

  • Meta Learning部分
  • ML framework部分
  • Build ensenble部分

ML framework部分でベイズ的最適化を用いて良いモデルを選択する、という方法は、Auto-WEKAですでに取り入れられているようです。
Auto-WEKA
ただ、Auto-WEKAだと探索するパラメータが多すぎる、アンサンブルを取ったモデルも含めて探索する、といった非効率性が欠点としてあったため、Auto-sklearnではMeta Learning部分とBuild ensanble部分を加えた3部構成にしているようです。

Meta Learning

この部分は、「効率性」に着目した部位です。高精度の機械学習モデルを自動的に構築する場合、前処理、特徴量エンジニアリングの方法、機械学習アルゴリズム、ハイパーパラメータといった膨大な選択肢をしらみつぶしに探していかなければなりません。コンピュータのリソースや時間が潤沢にあればこういった探索を行ってもよいですが、実際にはリソースに限りがあることが多く、制約がある中で効率的に良いもの探していく必要があります。その際に効率的に探す指針を与えてくれるのが、このMeta Learning部分です。

大まかには、この部分では以下のような操作が行われています。

  • あらかじめ、OpenMLの140のデータセットhttps://www.openml.org/search?type=data)から、後述のMeta Feature、およびベイズ的最適化による「ML framework」(前処理、特徴量エンジニアリング、分類器選択のセット)を抽出
  • 新しいデータセット:今回モデル構築したいデータを投入した際は、データからMeta Featureを算出、Meta Featureの空間でOpenMLのデータセットとのL_1距離を計算
  • 距離が近いものから25種類のML frameworkを選択し、それらをベースに次段のベイズ的最適化へ移行

データセットから計算するMeta Featureは以下のようです。基本的には、要約統計量や次元圧縮に関連する量、エントロピーなどがMeta Featureとなっているようです。
f:id:tekenuko:20171212222410p:plain

ML framework

ここでは、前段で選択された候補に関して処理を行います。論文の図をべた張りですが、前処理や分類器の候補は以下になります。
f:id:tekenuko:20171212222927p:plain
これらと、前段で絞りこんだ情報をもとに、ベイズ的最適化によりよいものを選択します。評価に関しては、あらかじめ評価指標を設定しておきます。
f:id:tekenuko:20171212223245p:plain

Build ensenble

Auto-sklearnでは、結果をロバストにするために、ML framework部分で算出した結果のアンサンブル平均をとっています。単に足し合わせるのではなく、精度向上に効果があるものを貪欲に入れ込んでいく、としているようです。
f:id:tekenuko:20171212223424p:plain

Auto-sklearnの性能

(ここの解釈は、若干誤解しているかもしれませんので、修正が入るかもしれません。)
論文での性能比較の表は以下です。
f:id:tekenuko:20171212224314p:plain
f:id:tekenuko:20171212224345p:plain
上の表がアルゴリズム間での比較、下の表が前処理方法間での比較です。数字が低いほど良いという見方です。結果を見ると、最も良いパフォーマンスではないが、安定して良い結果になっているという印象です。なので思考停止的にデータを投入してもそこそこの結果が出て来るというものになっているようです。とっても個人的なバイアスがかかっている意見だと思いますが、DataRobotみたいだな、と思いました。
www.datarobot.com
(といいつつDataRobotは黒魔術モデルまで込みで一番いいのを頼む、という感じなので、Auto-WEKAに近しいのかな)

まとめ

今回は、Auto-sklearnについて大まかな処理内容を紹介しました。機械学習のモデルに関して詳細を知らなくてもそこそこ良い結果が出る仕組みを作ったのは素晴らしいことだと思います。さらに、論文が出た時点では分類問題のみが対象でしたが、現在は回帰についても取り扱えるようです。こういった簡単に機械学習ができる仕組みが発達していき、活用のハードルが下がった結果、機械学習の活用シーンが広がって行くことを期待します。