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の全体感は以下になります。
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のデータセットとの距離を計算
- 距離が近いものから25種類のML frameworkを選択し、それらをベースに次段のベイズ的最適化へ移行
データセットから計算するMeta Featureは以下のようです。基本的には、要約統計量や次元圧縮に関連する量、エントロピーなどがMeta Featureとなっているようです。
ML framework
ここでは、前段で選択された候補に関して処理を行います。論文の図をべた張りですが、前処理や分類器の候補は以下になります。
これらと、前段で絞りこんだ情報をもとに、ベイズ的最適化によりよいものを選択します。評価に関しては、あらかじめ評価指標を設定しておきます。
Build ensenble
Auto-sklearnでは、結果をロバストにするために、ML framework部分で算出した結果のアンサンブル平均をとっています。単に足し合わせるのではなく、精度向上に効果があるものを貪欲に入れ込んでいく、としているようです。
Auto-sklearnの性能
(ここの解釈は、若干誤解しているかもしれませんので、修正が入るかもしれません。)
論文での性能比較の表は以下です。
上の表がアルゴリズム間での比較、下の表が前処理方法間での比較です。数字が低いほど良いという見方です。結果を見ると、最も良いパフォーマンスではないが、安定して良い結果になっているという印象です。なので思考停止的にデータを投入してもそこそこの結果が出て来るというものになっているようです。とっても個人的なバイアスがかかっている意見だと思いますが、DataRobotみたいだな、と思いました。
www.datarobot.com
(といいつつDataRobotは黒魔術モデルまで込みで一番いいのを頼む、という感じなので、Auto-WEKAに近しいのかな)