Naive Bayes分類器でスムージングをまったく行わない理由を知りたい(代わりに未知の機能を破棄できる場合)。
あなたの質問に対する答えは、すべてのクラスですべての単語が未知である必要はないということです。
次のように、機能A、B、およびCを持つ2つのクラスMおよびNがあるとします。
M:A = 3、B = 1、C = 0
(クラスMでは、Aは3回、Bは1 回だけ表示されます)
N:A = 0、B = 1、C = 3
(クラスNでは、Cは3回、Bは1 回だけ表示されます)
ゼロ回出現するフィーチャーを捨てるとどうなるか見てみましょう。
A)すべてのクラスでゼロ回表示される機能を捨てる
フィーチャAとCがクラスのいずれにもゼロ回出現するため、それらを破棄すると、ドキュメントを分類するためのフィーチャBのみが残ります。
また、以下に示すように、その情報を失うことは悪いことです!
次のようなテストドキュメントが提示された場合:
B = 1、C = 3
(Bを1回、Cを3回含む)
これで、機能AとBを破棄したため、上記のドキュメントがクラスMに属しているかクラスNに属しているかを判断できなくなります。
したがって、機能情報を失うことは悪いことです!
B)すべてのクラスでゼロ回表示される機能を捨てる
すべてのクラスでゼロ回出現する機能のみを破棄することにより、この問題を回避することは可能ですか?
いいえ、それは独自の問題を作成するためです!
次のテストドキュメントは、それを行うとどうなるかを示しています。
A = 3、B = 1、C = 1
MとNの確率は両方ともゼロになります(クラスNのAのゼロ確率とクラスMのCのゼロ確率を捨てなかったため)。
C)何も捨てない-代わりにスムージングを使用する
以下の理由により、スムージングを使用すると、上記の両方のドキュメントを正しく分類できます。
- そのような情報が利用可能なクラスでカウント情報を失うことはなく、
- ゼロカウントと競合する必要はありません。
実際の単純ベイズ分類器
NLTKのNaive Bayes分類子は、どのクラスでもカウントがゼロのフィーチャを破棄するために使用されていました。
これは、ハードEMプロシージャを使用してトレーニングしたときにパフォーマンスが低下するために使用されていました(非常に少ないトレーニングデータから分類器がブートストラップされる)。