機械学習を勉強するにあたり「アンサンブル学習で精度が大幅に向上したよ」や「バギング」「ブースティング」などのキーワードを耳にしたことがあるかと思います。(参照:機械学習とは?)
Kaggleなどのデータサイエンス世界競技では予測精度を競い合いますが、頻繁にこの「アンサンブル学習」の話題が上がります。事実、多くのコンペティションの上位にランクインする方々はアンサンブル学習を活用しています。
機械学習の中〜上級者がよく話をする「アンサンブル学習」ですが、そもそもどのような手法なのでしょうか?本記事では機械学習の初心者を対象としてアンサンブル学習を説明していきます。
この記事の目次 [隠す]
アンサンブル学習とは?
英語でアンサンブル(Ensemble)といえば合奏や合唱を意味しますが、機械学習においてのアンサンブル学習(Ensemble Learning)は、複数のモデル(学習器)を融合させて1つの学習モデルを生成する手法です。
シンプルに考えると、アンサンブル学習は1人で問題を解くより、複数人で意見を出し合って知識を補い合いながら解く方が正答率が上がるのと考え方は同じです。
アンサンブル学習を行うことで精度の低いモデル(弱学習器)でも高精度を実現することができます。複数のモデルを使うと言われても解りづらいかと思いますので、本記事ではアンサンブル学習の仕組みや異なる手法を一緒に紐解きましょう。
まずはアンサンブル学習を理解する上で前提となる知識、「バイアス(Bias)」「バリアンス(Variance)」の2つを説明します。
予測精度を改善するとは?
アンサンブル学習では複数の学習器(モデル)をお互いに協力させて予測の精度を向上させる目的で行われます。では予測の精度をあげるとはどのような意味なのでしょうか?
ここで大事なキーワードが「バイアス(Bias)」と「バリアンス(Variance)」です。これらの言葉は統計の用語で本記事では厳密な意味合いは割愛します。(詳しくは無料の機械学習のための統計入門コースをご覧ください)
機械学習の精度を向上するということは「予測値」と「実際値」の誤差を最小化することですが、その誤差をより的確に理解するために「バイアス」「バリアンス」が用いられます。
下の図は青い点が機械学習モデルが予測した値、赤い点がデータの実際の値を図式化したものです。
バイアスは実際値と予測値との誤差の平均のことで、値が小さいほど予測値と真の値の誤差が小さいということになります。対してバリアンスは予測値がどれだけ散らばっているかを示す度合いのことで、値が小さいほど予測値の散らばりが小さいということになります。
図中の②は高バイアスの状態を示しています。このような状況の場合、機械学習モデルは訓練データからしっかりと学習を行えていない可能性が高く、そのため予測値が実際値からずれ込んでいます。
対して図中③は高バリアンスの状態を示しています。高バリアンスの状態ではモデルは「過学習」をしている可能性が高く新しいデータを使った予測の精度が悪くなる傾向にあります。イメージをしやすくするため、図③では青い点を訓練データと考えてみましょう。高バリアンスの状態はこれらの訓練データを学習しすぎてしまい、予測が訓練データと類似した結果となってしまいっている状態です。
ここで重要なのが「バイアスとバリアンスはトレードオフの関係にある」を理解する事です。
つまり低バイアスの状態(予測値と実際値の誤差が少ない)になりますが、その一方でバリアンスは高まり過学習に陥るケースがあります。
Kaggleなどでアンサンブル学習を巧みに使いこなす上級者は、バイアスとバリアンスの最も適切なバランスを調整してモデルの精度を向上させていきます。
アンサンブル学習の仕組み
アンサンブル学習で複数の学習器を使う最大の利点は未学習のデータに対する予測能力を向上させることです。3人寄れば文殊の知恵とよく言いますが、機械学習においても、各学習器の精度がそれほど高くなくても、複数の学習器を融合させると精度が上がることがあります。
ではアンサンブル学習がどのような仕組みなのかについて考えてみましょう。本記事では数式や厳密な構造は割愛して大枠の概要を説明させて頂きます。
下の図は特徴量から○と×の分類を目的とした例です。一般的な機械学習のプロセスでは訓練を行うモデルは一つのみです。アンサンブル学習では下記のように複数のモデルを訓練して各モデルの予測を最終的に多数決をして決めます。
上の図では、個々の学習器の精度は正解率75%とそれほど高いとは言えません。しかし、4つのモデルの予測結果の多数決を採用することで、全体として正解率100%を達成しています。
上記は分類ですので多数決で最終的な結論を出せますが回帰の場合はどうすれば良いでしょうか?下の図を見てください。
分類では各モデルの多数決で最終的な予測を出力していましたが、回帰では各モデルの平均値を最終的な出力とすることが一般的です。
上記の回帰のアンサンブル学習の事例でもお判り頂けるかと思いますが、各モデル一つ一つは決して精度が高いとは言えません。しかし複数のモデルから最終的に平均値を採用することにより結果として予測の精度が上がるわけです。
*注釈*
上記の事例はアンサンブル学習の概要を理解するために簡略化しています。アンサンブル学習には様々な方法が存在し、全ての手法で上記のような処理を行なっている訳ではありませんのでご注意ください。
一見すると魔法のようなアンサンブル学習ですがさらに3つの手法に分類をすることが出来ます。それが「バギング」「ブースティング」「スタッキング」と呼ばれる手法です。
バギング(Bagging)とは?
バギングとは「Bootstrap Aggregating」の略で一般的にモデルの予測結果のバリアンスを低くする特徴があります。つまり少し大雑把に言えば、予測値と実際値の誤差が大きい場合の改善方法です。
ではバギングはどのようにして予測結果の改善(バリアンスを下げる)のでしょうか?その理由は各モデルに使う訓練データに秘密があります。
バギングではブートストラップ手法を用いて学習データを復元抽出することによってデータセットに多様性を持たせています。復元抽出とは、一度抽出したサンプルが再び抽出の対象になるような抽出方法です。
例えば下のような訓練データがあるとします。こちらは 6頭動物の特徴量(体重・尻尾・全長)と分類(犬・猫)のデータです。一般的な機械学習のプロセスではこの6頭のデータを使ってモデルの訓練を行います。
例えばバギングの手法を使って3つのモデルを組み合わせて予測精度の改善を行うとしましょう。その場合、全てのモデルが上の6頭のデータをそのまま使ってしまうと予測結果は同じになってしまいます。
そこでモデルに多様性を与えるため下記のように各モデルの訓練データを元データからランダムに選ぶような工夫を加えます。
このようにただ単純にモデルを複数作るわけではなく、訓練データの多様性などを考えながらモデルを構築することで、最終的な予測の精度を改善させます。
ブースティング(Boosting )とは?
アンサンブル学習の2つ目の手法として「ブースティング」があります。ブースティングは一般的にモデルの予測精度に対してバイアスを下げる特徴があります。
ブースティングもバギングと同様に複数のモデルを利用するわけですが、バギングとは利用の仕方が異なります。ブースティングは基本となるモデルを最初に訓練してベースラインを設けます。このベースラインとした基本モデルに対して何度も反復処理を行い改善を行なっていきます。
どのような改善かというと、基本モデルの間違った予測に焦点を当てて「重み」を加味して次のモデルを改善していくのです。モデルを作って間違いを加味した新しいモデルを作る。この流れを繰り返し行い、最終的に全てをまとめて利用します。
スタッキング(Stacking)とは?
最後に上級者向けとも言えるスタッキングについて簡単に説明をします。スタッキングとは言葉の通りモデルを積み上げていく方法です。上手く利用することによりバイアスとバリアンスをバランスよく調整する事が可能です。
スタッキングは非常に複雑にも成り得る手法ですが、ここではとても単純な構造をスタッキングの一例として説明します。
スタッキングの主な仕組みとしては、二段階に積み上げるとします。まず、第一段階で様々な学習器(例:ロジスティック回帰やランダムフォレスト)にそれぞれブートストラップ法で得たデータセットを学習させます。
この段階では弱学習器はランダムに選ばれます。第一段階の予測値を使って、第二段階では、どの学習器の組み合わせを使うと正解率が一番高いかを学習します。学習器によって正解率が高いものと低いものがあるので、より正解率の高い学習器のみを組み合わせることによって、ランダムで組み合わせるよりも精度が高くなります。
Kaggleなどの機械学習コンペで上位に入ってくるアルゴリズムの多くに、このスタッキングという手法が取り入れられています。上の説明では二段階しかスタッキングしませんでしたが、より複雑に複数段階に積み上げられることもできます。
下記はデータサイエンス国際競技で有名なKDD cup 2015年に優勝されたJeong Yoon Lee氏のスタッキング活用事例です。このスタッキングの事例では64のモデルをスタッキングさせています。それぞれの色は異なる機械学習の手法を示しています。
例えばNNとあるピンクのボックスはニューラル・ネットワークを指しており、LRとある黄色ボックスはロジスティック回帰を指しています。
「64 Single Models」と記載があるブロックでは各手法がそれぞれデータに対して訓練を行い予測結果を算出しています。それだけでも複雑に感じますが、さらに64モデルが出した予測値を入力値として使って「Stage 1 Esenble」のブロックでは新たに15モデルを構築しています。
さらにそこから「Stage 2」「Stage 3」と各層の出力を利用して新たに予測を繰り返すことで最終的に圧倒的な予測精度へと辿り着いた訳です。このように上級のデータサイエンティストは様々な機械学習の手法の強みと弱みを理解した上で、アンサンブル学習を行い精度の高いモデルを構築しているのです。
まとめ
如何でしたでしょうか?本記事では機械学習の初心者を対象としてアンサンブル学習の基礎知識を解説しました。機械学習が解決可能な問題は多岐に渡りますが、最終的な目的は常に「予測の精度を改善する」ことにあります。
アンサンブル学習を本格的に習得するためには、前提の知識として様々な機械学習手法の特徴や癖などを把握する必要があります。基本的な機械学習手法を学びたいとお考えの方は、ぜひ下記のチュートリアルを実践してみましょう。
機械学習 チュートリアルまた、これから機械学習を始めようと考えている方は下記の無料コースもお勧めです。
機械学習 準備編 無料講座以上となります!