ブースティングとバギング:堅牢な機械学習アルゴリズムの開発方法

機械学習とデータサイエンスには、Pythonライブラリにデータを投げて、出てくるものをすべて利用する以上のことが必要です

ブートストラップ/バギング/ブースティング

機械学習とデータサイエンスには、Pythonライブラリにデータを投げて、出てくるものをすべて利用する以上のことが必要です。

データサイエンティストは、システムを成功させるために、データとその背後にあるプロセスを実際に理解する必要があります。

実装の重要な方法論の1つは、ブートストラップメソッドを利用することでモデルがいつ利益を得るかを知ることです。これらは、アンサンブルモデルと呼ばれるものです。アンサンブルモデルの例には、AdaBoostおよびStochastic Gradient Boostingがあります。

アンサンブルモデルを使用する理由

これらは、アルゴリズムの精度を向上させたり、モデルをより堅牢にするのに役立ちます。この2つの例は、ブースティングとバギングです。ブースティングとバギングは、特にデータサイエンス/機械学習のインタビューに参加する予定の場合、データサイエンティストと機械学習エンジニアが知っておく必要があるトピックです。

基本的に、アンサンブル学習はアンサンブルという言葉に忠実です。異なるオクターブで歌う複数の人が1つの美しいハーモニーを作成するのではなく(それぞれの声が他のボイドを埋める)、アンサンブル学習は同じアルゴリズムの数百から数千のモデルを使用して、正しい分類を見つけます。

アンサンブル学習について考える別の方法は、盲人と象のant話です。この例では、各盲人は象の異なる部分を感じているため、自分が感じていることに同意しません。しかし、彼らが一緒になって議論した場合、彼らは同じものの異なる部分を見ていることを理解できたかもしれません。

ブースティングやバギングなどの手法を使用すると、統計モデルの堅牢性が向上し、分散が減少します。

ここで、これらの異なる「B」という言葉の違いは何ですか?

ブートストラップ

まず、ブートストラップの非常に重要な概念について話しましょう。多くのデータ科学者はこれを逃し、ブースティングとバギングの説明に直行します。ただし、両方ともブートストラップが必要です。

図1ブートストラップ

機械学習では、ブートストラップ法は置換を伴うランダムサンプリングを指します。このサンプルは、リサンプルと呼ばれます。これにより、モデルまたはアルゴリズムは、リサンプルに存在するさまざまなバイアス、分散、および特徴をよりよく理解できます。データのサンプルを取得すると、リサンプルに全体として含まれている可能性があるものとは異なる特性を含めることができます。これを図1に示します。各サンプルの母集団には異なる部分があり、同一のものはありません。これは、データセットの全体的な平均、標準偏差、およびその他の記述メトリックに影響します。次に、より堅牢なモデルを開発できます。

ブートストラップは、オーバーフィットする傾向がある小さなサイズのデータ​​セットにも適しています。実際、データセットが「ビッグデータ」とはほど遠いことを懸念しているある会社にこれを推奨しました。方法論(ブースティングまたはバギング)。

ブートストラップ方式を使用する理由は、ソリューションの安定性をテストできるためです。複数のサンプルデータセットを使用し、複数のモデルをテストすることにより、堅牢性を高めることができます。おそらく、1つのサンプルデータセットの平均値が他のサンプルセットよりも大きいか、異なる標準偏差があります。これにより、オーバーフィットで、さまざまなバリエーションのデータセットを使用してテストされていないモデルが破損する可能性があります。

ブートストラップが一般的になった多くの理由の1つは、計算能力の向上によるものです。これにより、他の方法よりも多くの順列を異なるリサンプルで実行できます。ブートストラップは、以下で説明するように、バギングとブースティングの両方で使用されます。

バギング

バギングは実際には(ブートストラップアグリゲーター)を指します。 1996年に「Bagging Predictors」と呼ばれる論文を書いたLeo Breiman氏も、バギングアルゴリズムを使用して参照するほとんどすべての論文または投稿に言及します。

Leoは、バギングを次のように説明しています。

「予測変数のバギングは、予測変数の複数のバージョンを生成し、これらを使用して集計された予測変数を取得する方法です。」

バギングは、非常に正確である可能性のあるモデルからの分散を削減するのに役立ちますが、それらは訓練されたデータのみです。これは、オーバーフィットとも呼ばれます。

オーバーフィッティングとは、関数がデータにうまく適合しすぎる場合です。通常、これは、実際の方程式が複雑すぎて各データポイントと外れ値を考慮することができないためです。

図2オーバーフィット

簡単にオーバーフィットできるアルゴリズムの別の例は、決定木です。決定木を使用して開発されたモデルには、非常に単純なヒューリスティックが必要です。決定木は、特定の順序で実行される一連の「if-else」ステートメントで構成されます。したがって、データセットが、前のセットと比較して基礎となる機能ではなく、バイアスまたは相違がある可能性がある新しいデータセットに変更された場合、モデルは正確になりません。これは、データがモデルにも適合しないためです(とにかく逆方向のステートメントです)。

バギングは、複数の仮説(モデル)をテストしながらデータをサンプリングおよび置換することにより、データ間に独自の分散を作成することにより、これを回避します。同様に、これは、さまざまな属性(中央値、平均など)を持つデータで構成される可能性が高い複数のサンプルを利用することで、ノイズを減らします。

各モデルで仮説が作成されると、モデルは分類に投票を使用し、回帰に平均を使用します。これは、「ブートストラップ集約」の「集約」が作用する場所です。各仮説の重みは他のすべての仮説と同じです。後でブーストについて説明するとき、これは2つの方法論が異なる場所の1つです。

図3バギング

基本的に、これらのモデルはすべて同時に実行され、どの仮説が最も正確であるかについての投票が行われます。

これは、分散を減らすのに役立ちます。つまり、オーバーフィットを減らします。

ブースティング

ブースティングとは、加重平均を利用して弱い学習者をより強い学習者にするアルゴリズムのグループを指します。各モデルを個別に実行し、最後に出力をすべてのモデルに優先させることなく集約するバギングとは異なり、ブースティングはすべて「チームワーク」に関するものです。実行する各モデルは、次のモデルが注目する機能を決定します。

ブースティングにはブートストラップも必要です。ただし、ここには別の違いがあります。バギングとは異なり、ブーストはデータの各サンプルを重み付けします。つまり、一部のサンプルは他のサンプルよりも頻繁に実行されます。

データサンプルに重みを付ける理由

図4ブースティング

ブースティングは各モデルを実行するときに、どのデータサンプルが最も成功し、どのデータサンプルが成功しないかを追跡します。最も誤分類された出力を持つデータセットには、より重い重みが与えられます。これらは、より複雑で、モデルを適切にトレーニングするためにより多くの反復を必要とするデータと見なされます。

実際の分類段階では、ブースティングによるモデルの扱い方にも違いがあります。ブースティングでは、より良いモデルほどより良い重みが与えられるため、モデルのエラー率が追跡されます。

そのようにして、バギングのように「投票」が発生すると、より良い結果のモデルが最終出力をより強く引き寄せます。

概要

ブースティングとバギングはどちらも分散を減らすための優れた手法です。通常、アンサンブルメソッドは単一のモデルよりも優れています。これが、Kaggleの受賞者の多くがアンサンブル方法論を利用した理由です。ここで説明しなかったのはスタッキングです。 (それは独自の投稿が必要です。)

しかし、彼らはすべての問題を解決するわけではなく、彼ら自身に問題があります。使用する理由はさまざまです。バギングは、モデルが過適合の場合に分散を減らすのに最適です。ただし、2つの方法のうち、ブースティングの方が優れている可能性が高くなります。ブーストはパフォーマンスの問題を引き起こす可能性がはるかに高くなります。また、アンダーフィットモデルのバイアスを減らすのにも適しています。

これが、経験と主題の専門知識の出番です!動作する最初のモデルに簡単にジャンプできます。ただし、アルゴリズムとそれが選択するすべての機能を分析することが重要です。たとえば、決定木が特定のリーフを設定する場合、問題はなぜになります!他のデータポイントとビジュアルでサポートできない場合は、おそらく実装すべきではありません。

AdaBoost、またはさまざまなデータセットでランダムフォレストを試すだけではありません。最終的なアルゴリズムは、得られる結果と、どのようなサポートがあるかによって異なります。