5

私は単純ベイズ分類器を実装して、本質的に機能のセット(バッグではなく)であるドキュメントを分類しようとしています。つまり、各機能には固有の機能のセットが含まれており、各機能はドキュメントに最大1回表示されます。たとえば、機能をドキュメントの一意のキーワードと考えることができます。

私はレニーらをしっかりとフォローしました。al。http://www.aaai.org/Papers/ICML/2003/ICML03-081.pdfの論文ですが、対処されていないように見える問題が発生しています。つまり、短いドキュメントを分類すると、ドキュメントの特徴の数が少なくなるため、事後確率がはるかに高くなります。長いドキュメントの場合はその逆です。

これは、事後確率が(分母を無視して)次のように定義されているためです。

P(class|document) = P(class) * P(document|class)

これはに拡張されます

P(class|document) = P(class) * P(feature1|class) * ... * P(featureK|class)

このことから、乗算する用語が少ないという理由だけで、機能が少ない短いドキュメントの事後確率が高くなることは明らかです。

たとえば、機能「foo」、「bar」、および「baz」がすべてポジティブトレーニング観測に表示されるとします。次に、単一の機能「foo」を持つドキュメントは、機能{"foo"、 "bar"、"baz"}を持つドキュメントよりもポジティブクラスに分類される事後確率が高くなります。これは直感に反しているように見えますが、これを解決する方法がよくわかりません。

実行できるある種の長さの正規化はありますか?ドキュメントのサイズを機能として追加するというアイデアもありますが、トレーニングデータ内のドキュメントのサイズによって結果が歪むため、これは適切ではないようです。

4

1 に答える 1

4

これは良い質問です。ここに問題があるかどうかは完全にはわかりません。事後確率は、ドキュメントが与えられた場合の各クラスの確率(つまり、各ドキュメントのクラスの確率)を単純に示します。したがって、ドキュメントを分類するときは、同じドキュメントが与えられた後継者のみを比較しているため、機能の数は変更されません(ドキュメント間を移動しないため)。つまり、次のようになります。

P(class1|document) = P(class1) * P(feature1|class1) * ... * P(featureK|class1)
...
P(classN|document) = P(classN) * P(feature1|classN) * ... * P(featureK|classN)

後部が最も高いクラスは、ドキュメントのラベルと呼ばれます。したがって、機能の数はクラスではなくドキュメントに依存しているように見えるため、正規化する必要はありません。

私は何かが足りないのですか?分類以上のことをしたい場合、たとえば特定のクラスの最も可能性の高いドキュメントを比較したい場合は、事後確率の実際の定義を使用する必要があります。

P(class1|document) = P(class1) * P(feature1|class1) * ... * P(featureK|class1)/Sum_over_all_numerators

そして、これはさまざまなフィーチャ長のドキュメント間で正しく正規化されます。

于 2011-09-10T18:57:15.217 に答える