アンサンブル学習とは?仕組みやアルゴリズムを解説!
機械学習において、「アンサンブル学習」という言葉を一度くらいは目にしたことがある人は少なくないのではないでしょうか。
実はこの考えは機械学習をしていく上で、なくてはならない重要なものです。
さらに、アンサンブル学習には「バギング」「ブースティング」「スタッキング」という三つの手法があります。
これらはどう違うのでしょうか。
「アンサンブル学習とは何か」という定義から手法の違い、また学習する上でのメリットや注意点まで、基本的な知識を解説します。
アンサンブル学習とは
「アンサンブル」は元々音楽用語
「アンサンブル」というと、音楽を思い浮かべる人も多いでしょう。
二人以上で楽器を演奏して一つの音楽を奏でる、つまり「合奏」という意味を持つ単語です。
しかしながらアンサンブル学習とは機械学習の手法の名前であり、音楽とはまったく関係がありません。
では何故関係ない筈の音楽になじみの深い単語が使われているのでしょうか。
実は、「アンサンブル学習」という名前は学習の手法をそのまま表した名前です。
アンサンブル学習の基本的な考え方
アンサンブル学習は、弱学習器を多く使うことで精度を上げる手法のことをいいます。
「多数決」という表現もよく使われるでしょう。
弱学習器自体は、決して精度が高くありません。
しかしながら、それを多数集めると自然と精度が上がっていきます。
どういうことかというと、まず弱学習器の結果がたくさん出ているとしましょう。
その結果は多種多様ですが、全体的に「Aの結果は〇が多い」「Bの結果は×が多い」といった偏りがでてきます。
つまり多数派の答えを採用すれば、自ずと正しい正解が導き出せます。
だから「多数決」ということです。
しかし結果が「〇」か「×」ではなく、「50」や「100」といった数字の場合はどうするのでしょうか。
その場合は、平均値を計算します。結果の数値を全て足し算し、その後結果の数で割り算します。
この場合、平均値が最終予測値です。
かなり簡略化しましたが、これがアンサンブル学習の基本的な仕組みです。
全てのアンサンブル学習がこのやり方をしているわけではありませんが、大まかにこのようなものだとイメージしておきましょう。
バイアスとバリアンス
アンサンブル学習には、「バイアス」と「バリアンス」という二つの概念が重要となります。
特にこの学習手法を使う際には、必ず覚えておかなければならない概念です。
アンサンブル学習は精度の低い情報を寄せ集め、精度を上げていく学習。
しかしながら、ただたくさん集めるだけでは必ずしも精度を上げられるとは限りません。
うまく精度が上がらない場合、この「バイアス」と「バリアンス」のバランスが悪い可能性があります。
いきなり難しい言葉が二つも登場して混乱するかもしれませんが、まずは落ち着いて一つ一つ見ていきましょう。
バイアスとは
バイアスとは、簡単に説明すると「実際値と予測値の差」です。
この差が小さければ小さいほど精度が高く、より正確に予測できているということになります。
元々予測されていた価と、実際にやってみた場合の価が違うということはよく起こりうることです。
たとえば「5」が出ると予測されていて、実際出たのは「3」だとします。
5と3の誤差は2であまり誤差は大きくありません。精度が高く、信頼できるといえるでしょう。
逆に10が出ると予測されていたのに、実際は2しか出なかったらどうなるでしょうか。
誤差が大きいのであまり信頼できない、精度が低いと感じる筈です。
後者のように誤差が大きく、ばらつきがあるのを前者に比べて「高バイアス」と呼びます。
つまり、正確な値を出すにはバイアスを低くする必要があるといえます。
高バイアスになってしまうのは、きちんと訓練を行えていないからです。
バリアンスとは
バリアンスとは、簡単にいうと「予測値が散らばっている度合い」のこと。
予測値が「5~10」と「1~10」では、前者の方が散らばり度合いが低いといえます。
後者のように散らばり度合いが高い状態を「高バリアンス」と呼び、精度が低くなってしまいます。
バリアンスが高くなってしまうのは、訓練のし過ぎである「過学習」が原因です。
訓練すればするほど参考にできる結果は得られますが、得過ぎると逆にどれが正しいのかが分からなくなってしまいます。
精度を高めるには、バリアンスを低く抑えなければなりません。
バイアスとバリアンスの関係
バイアスとバリアンスは、よく「トレードオフの関係」と呼ばれます。
トレードオフとは、「何かを得るためには別の何かを犠牲にしなければならない」関係性のことです。
訓練をすればするほどバイアスは低くなりますが、一方でバリアンスは高くなります。
逆にバリアンスが低いと、その分学習回数も減るのでバイアスが高くなり、精度が落ちます。
どちらが低くなりどちらが高くなるのかは、学習方法によって違います。
この学習の場合は、元々精度の低い学習器(高バイアス)をいくつも使ってバイアスを下げ、バリアンスを上げていく手法です。
つまり、バイアスは下げられますが高バリアンスに陥りやすいといえるでしょう。
過学習にならないように注意する必要があります。
アンサンブル学習を行うメリット
アンサンブル学習の仕組みについて解説しましたが、アンサンブル学習はかなり有用な手法だといわれています。
有用だといわれるからには、強力なメリットが何かしらある筈です。
いったいどのようなメリットがあるのでしょうか。
弱学習器を活用できる
この方法なら、弱学習器(精度が低い学習器)を活用しても十分な結果を得ることができます。
精度の高い学習器を用意できなくても信用できる結果を得られるのは、コストや時間においてもかなり大きなメリットといえるでしょう。
精度が高い
何度も解説しているように、この学習方法は精度を上げていく手法です。
つまり、そこから得られる結果も必然的に精度が高いものとなります。
どんなに精度が低い学習器でも、そこから正確な値を出せるのは大きなメリットといえるでしょう。
アンサンブル学習の注意点
アンサンブル学習にはかなり大きなメリットがありますが、逆に注意しておかなければならない点もあります。
実際に行う前に、これから解説する点を念頭に置いておきましょう。
構築に時間がかかる
アンサンブル学習は何度も繰り返して学習を行います。そのため、繰り返す分時間がかかってしまうということです。
あまり精度を求めないのであれば弱学習器のままで行うか、時間がないなら他の手法を利用した方が良いでしょう。
バイアスとバリアンスのバランスが難しい
アンサンブル学習はバイアスを抑えて精度を上げます。
しかしながら、その分学習回数が多くなるのでバリアンスが高くなり過ぎるという面があります。
バイアスを抑えることも重要ですが、今度はバリアンスを上げすぎないようにバランスをとらなければなりません。
そのバランスの度合いが難しいのがアンサンブル学習です。
過学習になると精度が落ちる原因になってしまうため、交差検証法などを使用して繰り返し過ぎないように注意してください。
アンサンブル学習の種類
アンサンブル学習と一言にいっても、その手法にはいくつもの計算方法(アルゴリズム)が存在します。
中でも代表的なのが以下の三種類です。
- バギング(Bagging)
- ブースティング(Boosting)
- スタッキング(Stacking)
これらはどのような計算で値を出すのでしょうか。
ここでは上記三種を一つずつ、詳しく見ていきましょう。
ちなみに、アンサンブル学習には他にも「Max Voting」や「Weighted Average Voting」といったアルゴリズムもあります。
とはいえ、先に挙げた三種類をマスターすれば心配ありません。
バギング(Bagging)
バギングとは
バギングはアンサンブル学習の中でも代表的かつ主流なアルゴリズムです。
学習データはすべて使わずに、一部だけ使用します。そしてそのデータを最後に結合。
データの一部を使うことで過学習を防ぎ、バリアンスを下げられます。
また、このバギングを利用した代表的な計算方法が、決定木を使用する「ランダムフォレスト」です。
今回はあくまでも、バギングの基本的な知識を解説しましょう。
バギングの方法
バギングは以下の方法で行います。
- 学習データの中から決められた回数分のデータを抽出し、このサンプルデータからそれぞれ「データセット」を作る
- データセットから弱学習器を作る
- 1~2を決められた回数分繰り返す
- 作成した弱学習器から結果を構築する
簡単な流れはこのようになります。
始めの「決められた回数分データを抽出」してできたサンプルは、「ブーストラップサンプル」と呼びます。
作成される弱学習器は、3で繰り返された回数分作られるということです。
学習データの一部のみを使うのがバギングの特徴です。あまり繰り返し過ぎるとほぼすべてのデータを使うことになってしまいます。
バリアンスが高くなる原因にもなるため、回数設定には注意しましょう。
バギングのメリットと注意点
バギングのメリットは以下の二点です。
- データの一部のみを使うため、アンサンブル学習の弱点であるバリアンスを下げることができる
- 作成された学習器は、それぞれ並列で計算できる
一方、最終データを構築するデータのばらつきはブーストラップサンプルのばらつきであり、似通ってしまう可能性があります。
抽出したデータサンプル同士のばらつきが似ていると、あまり精度を上げられずに終わる可能性もあるので注意が必要です。
ブースティング(Boosting)
ブースティングとは
ブースティングも、バギングと並んで代表的なアンサンブル学習の手法です。
こちらは学習器の予測値を使ってバイアスを下げる計算方法となります。
バギングと同じように学習器を複数使いますが、使い方は全く違うものです。
ベースとなる学習器に他の学習器の間違った予測を当て、反復処理を行うことで精度を上げていきます。
つまり、前にはじき出されたデータを再利用するのがブースティングだということです。
一つ前のデータを次の計算にそのまま使うため、並列処理はできません。
ブースティングの方法
ブースティングの流れは以下のようになります。
- データの一部を決められた回数分抽出して弱学習器を作成する
- 学習器の誤った一つの結果と、正解のサンプルを比べる
- 誤り率と重要度を弱学習器ごとに計算する
- 計算毎に全体の重みを調節する
そのデータが誤っていればいるほど重み(ウエイト)が大きくなり、正しければ重みは小さくしていきます。
こうすることで、次に学習する弱学習器が誤っているデータを重点的に学習してくれるようになるということです。
重点的に学習すれば、次回以降の精度が上がっていきます。
ブースティングの種類
単にブースティングと呼ばれる手法は、厳密にいうとアダブーストという手法であることもあります。
アダブーストは学習データ全てを使用しますが、他の流れは本来のブースティングと同様です。
バギング同様、ブースティングにも様々な種類があります。
アダブーストの他には、勾配降下法を使用する勾配ブースティングが代表的です。
GBDTや、C++を使用して勾配ブースティングを高速化したXGboostも勾配ブースティングの一種です。
計算方法ごとに特徴はありますが、基本的には先に解説したブースティングと共通しています。
ブースティングのメリットと注意点
ブースティングのメリットは、なんといってもバギングよりも精度が高いということです。
バギングは抽出したデータによって精度が下がってしまいますが、ブースティングは前のデータを再利用するので必然的に精度が上がります。
しかし、バリアンスが高くなりやすいのは注意点だといえるでしょう。
ブースティングは前のデータを使って何度も学習を行うアルゴリズムです。
そのためバイアスは下がりやすい反面、過学習が起きやすいのが弱点といえるでしょう。
スタッキング(Stacking)
スタッキングとは
バギングやブースティングほど主流ではありませんが、スタッキングも代表的なアンサンブル学習のアルゴリズムです。
スタッキングは簡単に説明するとデータを積み上げて精度を上げる手法で、少し複雑になりやすい傾向にあります。
無論、スタッキングも複数の学習器を使う手法です。
スタッキングの方法
スタッキングは、二段階以上の段階を踏みながらデータを積み上げていきます。
大まかな流れはこのようになります。
- 学習器にランダムフォレストや勾配ブースティングなどを様々な計算法を使って、複数のモデルを用意する
ここまでが第一段階です。
このモデル作成は、できるだけ多くの種類の計算方法を使ってモデルを作成した方が精度の向上に繋がります。
- モデルから予測値を出力する
- 予測値をまとめたメタモデルを作成する(計算法は自由)
- メタモデルから最終予測値を作成する
ここまでが第二段階となります。
ここで学習を終える場合もあれば、メタモデルをさらに複数個作成し、新たに予測値を出力する第三段階に移行することもあります。
スタッキングのメリットと注意点
スタッキングのメリットは様々な計算方法(アルゴリズム)を使った結果を使用できるということです。
計算方法が違うことで、出力される予測値が変わる可能性があります。
その可能性を生かして精度を上げられるのがスタッキングの強みですね。
無論、全て同じアルゴリズムでモデルを作ることも可能です。
とはいえ、様々なアルゴリズムを使った方が精度が上がりやすくなります。状況に応じてうまく利用しましょう。
逆に注意点を挙げるとするなら、必ずしも精度の良い結果になるとは限らないということです。
様々な計算法で計算すると精度が高まりやすいと解説しましたが、必ずしも本当に精度が高くなるわけではありません。
さらに、スタッキング方式は積み上げ式なので単純に手間がかかるという面もあります。
様々なアルゴリズムを使うとなると、多少の煩わしさが発生する可能性もあります。
スタッキングを利用する際は、以上の注意点を十分覚えておきましょう。
3種の違い
ここまで代表手的な三つの手法を解説しました。
しかしながら、何が違うのか混乱してしまった人もいるのではないでしょうか。
ここで三種の違いを確認してみましょう。
モデル数 | サンプル数 | モデル作成方法 | 最終結果の出し方 | |
バギング | 複数 | 複数 | 並行 | 各結果の平均値 |
ブースティング | 複数 | 複数 | 階段式 | 各結果の重量の平均 |
スタッキング | 複数 | 単体 | 並行 | モデルを線形結合 |
バギングが良いのか、それともブースティングやスタッキングが良いのかはその時の状況に大きく左右されます。
どの手法が良いのか分からない場合は、一通り試してみることをおすすめします。
何度もやってみることで、次第に選択のし方が分かってくるようになるでしょう。
アンサンブル学習でさらに精度を上げよう
アンサンブル学習について解説しました。
今やアンサンブル学習は、機械学習において代表的な存在になっています。
そのため是非ともマスターするようにしておきましょう。
とはいえアンサンブル学習はやり方も様々あります。そのため慣れないうちは混乱してしまうかもしれません。
しかし基本は「弱学習器の結果を集めて精度を上げる」で共通しています。
まずはバイアスとバリアンスのバランスに注意しながら、実際に挑戦することが大切です。
機械学習については、以下の記事でも詳しくご紹介しています。機械学習についての理解を深めたい方は、ぜひ併せてご参照ください。
代表的な機械学習アルゴリズムの仕組みをわかりやすく解説!ディープラーニングとはどう違う?モデルの選び方も紹介します!
toiroフリーランスは、SHIFTグループがプライムとして参画している独自案件をフリーランスエンジニア向けに紹介する唯一のプラットフォームサービスです。
エージェントによるサポートもありますので、ご利用を検討してみてはいかがでしょうか。