アンサンブル分類器で分類はどのようにマージされますか?


8

アンサンブル分類器は、構成要素である分類器の予測をどのようにマージしますか?明確な説明が見つからない。私が見つけたいくつかのコード例では、アンサンブルは予測を平均化するだけですが、これがどのようにして「より良い」全体的な精度を実現できるかはわかりません。

次のケースを考えてください。アンサンブル分類子は、10個の分類子で構成されています。1つの分類子の精度は、データサブセットXの時間の100%、それ以外の時間はすべて0%です。他のすべての分類子の精度は、データサブセットXでは0%、その他の場合はすべて100%です。

分類器の精度が無視される平均化式を使用すると、集団分類器の精度はせいぜい50%になります。これは正しいですか、それとも何か不足していますか?N個の潜在的に無知な分類子から平均予測を取得すると、特定のドメインの専門家である単一の分類子よりも優れた予測を作成できる可能性があります。

回答:


5

Tan他による「Introduction to Data Mining」から明確な例を読みました。

この例は、分類子を投票システムと組み合わせる場合、つまり最も投票数の多いクラスでレコードを分類する場合に、パフォーマンスが向上すると主張しています。ただし、この例では予測ではなく分類子の出力ラベルを直接使用しています(確率を意味していると思います)。

汎化エラーがある25の独立した分類子を用意しましょう e=1正確さ=0.35。レコードを誤って分類するには、それらの少なくとも半分が誤って分類する必要があります。

すべては確率変数でモデル化できますが、少なくともそれらのうちの13がレコードを誤って分類する確率を計算する必要があります

Σ=132525e1e25=0.06
ここで、合計の各項は、 分類子はレコードクラスを正しく取得し、 25 それを誤解する。

直接予測を使用し、組み合わせ方法として平均を使用すると、アンサンブルパフォーマンスの向上を示すのが少し難しいと思います。ただし、予測のみに焦点を当て、アンサンブルの出力ラベルを気にせずに、より多くの予測を平均化することは、実際の確率の推定量と見なすことができます。したがって、分類子を追加すると、集団手法の予測が改善されます。


1
これは、アンサンブルが機能する理由を理解するのに最適な方法です。ただし、特定のケースは、パフォーマンスの向上という点で楽観的すぎる可能性があります。これは基本的なものであり、各分類子は(通常)同じデータでトレーニングされます-分類子の独立性を疑わしくします。
probabilityislogic

もちろん、独立はあまりにも強い仮説です。
Simone

5

「悪い」分類子の精度が0%ではなく、ランダムな推測よりもはるかに優れているわけではないという事実を見逃しています。

このように、正しい予測は常に同じであり、蓄積されます(真実は1つだけなので)。一方、悪い予測はランダムなノイズであり、平均化されます。


分類子が全体的に「悪い」または「良い」というわけではありません。特定のドメインにおける各分類子の精度について話している。1つの分類子が特定のドメインで完全な場合、それをアンサンブルに含めると、他のすべての分類子が誤った分類を行う可能性があるため、その有用性が不明瞭になる可能性があります。
Cerin

1
完全な矛盾(実際の使用可能なデータにはほとんど存在しない)がない限り、ドメインは何も変更しません。分類子は、ドメイン外のオブジェクトの悪いクラスだけでなくノイズも生成するため、このようにすると、異なる部分的な分類子のみが "各ドメインで「良い」。とにかく、シャープで完璧な信号がノイズによって消滅することは明らかですが(完全にではないかもしれませんが)、これは、どの部分分類子がどのオブジェクトに対して機能するかについての情報がない場合のトレードオフです。

私の要点は、優れた分類子を取り、それが悪い分類子での予測である場合、平均すると、より良い予測が得られる可能性は低いということです。あなたはあなたの良い予測を薄めています。
セリン

@chriss-通常、各分類子を平均してそのパフォーマンスに従って重み付けします。このスキームでは、優れた分類子は他の優れた分類子によってのみ希釈されます。クラップ分類子は重みが低く(通常は指数関数的に低く)、したがって希釈されません。
probabilityislogic

@ChisSそのとおりです。アンサンブルのポイントは、オブジェクトごとに最適な分類子を正確に選択できないため、ノイズによる相関のある信号減衰と相関ベース分類子の破滅のリスクに対する合理的な解決策を平均的に交換できることです。

0

分類の場合、一般的に予測をアンサンブルするには2つの方法があります。バイナリクラスの分類の問題で、アンサンブルする3つのモデルm1、m2、m3があり、トレーニングデータセットはtrainと呼ばれ、テストデータセットはtestと呼ばれます。モデルは既にtrainでビルドされています。Pythonコードは次のようになります。

最初の方法は平均のラウンドを取ることです

pred=round([m1.predict(test)+m2.predict(test)+m3.predict(test)]/3) 

したがって、出力は値0と1のベクトルになります

2番目の方法は、これらのモデルから各クラスの予測確率をアンサンブルし、それをアンサンブルして、ハードしきい値または何らかのロジックに基づいてクラスを決定することです。

pred_proba=[m1.predict(test).predict_proba++ m2.predict(test).predict_proba 
+m3.predict(test).predict_proba]/3 
# Simple average ensemble,however you can try weighted average as well

pred_probaベクトル全体を反復処理して、ハードしきい値0.5に基づいて、0の1と1の1を見つけます。

pred=[] # Initialize a blank list for prediction

for x in pred_proba:
 if x>0.5:
   pred.append[1]
 else:
   pred.append[0]

したがって、predは最終的なアンサンブル予測です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.