刮目せよ!アンサンブル機械学習

前回は、機械学習のうちでも今、最も話題の手法・ディープラーニングについて、自分なりに学んだことを、アップしてみました。その結果、ディープラーニングといえども万能ではないこと、アンサンブル機械学習なる、場合によってはディープラーニングよりも適している手法があることを、学びました。

今回は、そのアンサンブル機械学習について、学んだことをアップしていきたいと、思います。

アンサンブルとは何なのか

今回も前回と同じく、まずは言葉の意味から、考えてみたいと思います。アンサンブルとは、辞書的に言うと、「各部分が総合され調和のとれた全体」という意味だそうです。つまり、「アンサンブル機械学習=何かの部分から構成された、全体としての機械学習」と言うことが、できるかと思います。

では、何かとは一体、何なのでしょう?まずは、以下をご覧ください。〇×クイズの回答を予測するAIを、機械学習で作ったとします。

正解 機械学習1の予測 機械学習2の予測 機械学習3の予測 多数決
×
×
×

個々の機械学習1~機械学習3は、正解率が75%ですが、多数決を取ると、全体として、正解率が100%になります。この、個々の機械学習1~3こそが、アンサンブル機械学習を構成する「何か」であり、専門用語で「弱学習器」なんて、呼ばれたりします。

そして、アンサンブル機械学習とは、「一個一個は精度が低い、複数の弱学習器から構成された、全体として精度の高い機械学習」と言うことが、出来るかと思います。

次から、代表的なアンサンブル機械学習の手法を、もう少し掘り下げてみたいと思います。

アンサンブルじゃない機械学習

おそらく、上級者ともなれば、自前で弱学習器を組み合わせて、独自のアンサンブル機械学習モデルを、状況に応じて組み上げたり、出来るのでしょうが・・・

世の中には、組みあがり済みのアンサンブル機械学習のライブラリが、いくつかあります。そんな世の中で人気のアンサンブル機械学習ライブラリで、弱学習器としてよく利用されている手法が・・・決定木/回帰木と呼ばれるものです。以下を、ご覧ください。

f:id:tatsu_mk2:20190323144039p:plain
図1 決定木のイメージ

よく機械学習の本なんかに出てくる、アヤメの花の分類を、決定木でやってみたものを、可視化した図です。まずは、「petal lengthが2.45以下かどうかを判定し、続いて、petal widthが1.75以下かどうかを判定し・・・」という風に、延々とif文を繰り返していくような形で、入力データを処理します。

処理結果が、上記図のように、いくつかの種類に分かれるものは「分類」といい、画像認識なんかも、これにあたります。一方、処理結果が、「金額」のように、無数の連続値をとるものは「回帰」と呼ばれ、上記の手法で回帰問題を解く場合は、「回帰木」なんて、呼ばれます。

この決定木/回帰木を弱学習器として利用した、いくつかのアンサンブル機械学習の手法が、ディープラーニングと並び、コンテストなんかでもよく利用されている、そうです。

アンサンブル機械学習の手法その1:バギング

一つ目が、バギングと呼ばれる手法で、まんま上の方で例示した、これです。

正解 決定木1 決定木2 決定木3 多数決
×
×
×

ちょっとずつパラメータを変えた、複数の決定木/回帰木を弱学習器として並列に使い、多数決したり平均を取ったりして、全体としての予測結果を出す手法で、ランダムフォレストと呼ばれます。ランダムにちょっとずつパラメータを変えた木を、たくさん作るので、森というわけですね。

ランダムフォレストは、安定して精度が出て、チューニング用のパラメータも少ない・分かりやすく、どの入力データが予測をするうえで重要だったか、ランキングを付けて教えてくれるという、初心者にも優しい親切設計な手法です。

迷ったら、とりあえずランダムフォレストを使っておいても、間違いない!?かも、しれません。

アンサンブル機械学習の手法その2:ブースティング

並列があるなら直列もあるだろうということで、複数の決定木/回帰木を弱学習器として直列に使う手法が、ブースティングになります。

ブースティングの手法は複雑で、まだ私もあまりよく理解はできていないのですが・・・ざっくりイメージを書くと、以下のような処理の流れに、なります。

  1. 決定木/回帰木を使って、入力データを学習・評価。
  2. 予測誤差があったところを重点的に補正し、第二の決定木/回帰木を、作る。
  3. 入力データを学習・評価し、予測誤差があったところをry

という風に、逐次的に、誤差があったところを重点的に補正しつつ、学習を進めていきます。ランダムフォレスト(バギング)と比べて、以下の特徴があると、言われています。

  • 【-】学習時間がかかる(直列だし)。
  • 【-】学習パラメータが多く、チューニングが難しい。
  • 【-】解釈が難しい。
  • 【+】ちゃんとチューニングできれば、予測精度はバギングより高くなることが、ある。

つまり、安定して精度が出て、そこそこ解釈性もあり、チューニングもそこまで難しくない、いい意味で丸いやつ(?)がランダムフォレストで、難しいけど頑張れば精度が出る、とがったやつ(?)がブースティングといった、ところでしょうか。

イメージ的に、弱学習器⇒バギング⇒ブースティング⇒ディープラーニングとなるに従って、精度はあがるものの、「何故そういう予測になったのか」を人間が理解するのが難しくなる、専門用語で言うところの解釈性が低くなるような、イメージがあります。

ブースティングの代表的な手法として、XGBoostというものが長らく人気でしたが・・・最近、Microsoftが出した、LightGBMという手法が、人気なんだそうです。ぱっとやってみた感じ、Lightの名にたがわず計算時間も早く、マイエース手法になってくれそうな?予感が、あります。

・・・というわけで、アンサンブル機械学習がなんだかわかったところで(?)、次からは実際に、いくつかの問題を、機械学習で解いていってみたいと思います。

最後まで読んでいただいて、ありがとうござました。