2011-09-09 6 views
4

私は基本的に(バッグとは対照的に)に設定された文書を分類するためにナイーブなベイズ分類子を実装しようとしています。それぞれの文書は最大1回の文書内で出現することができます。たとえば、その機能をドキュメントの一意のキーワードと考えることができます。文書用のナイーブなベイズ分類器の長さ正規化

私はRennie、et。 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"}を有する文書よりも、陽性クラスに分類される事後確率が高くなる。これは直感的ではないようですが、私はこれをどのように解決するかについてはあまりよく分かりません。

長さの正規化を行うことはできますか? 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 

そして、これは、様々な機能の長さのドキュメント間で正しく正規化するでしょう:あなたは事後確率の実際の定義を使用しなければならない特定のクラスの最も可能性の高い文書を比較します。

+0

実際には、「特定のクラスの最も可能性の高いドキュメントを比較したい」あなたの最後の方程式の分母が何を指しているのか分かりません。 "Sum_over_all_numerators"はP(feature1)* ... * P(featureK)を指していますか?私はそれが事後確率の完全な定義なので、あなたが意味することであると仮定しています。 – pmc255

+0

補足:私は、分母がクラス間のposteriorsを比較するときだけ除外できることが重要だと思っていますが、文書間で比較しているのではありません。分母に加えて事後確率を効果的に正規化するでしょうか?私はそれが私が探していたものだと思います。ありがとう! – pmc255

関連する問題