ナイーブベイズの実装


10

私は、ラプラシアン平滑化によるテキスト分類のための単純ベイズアルゴリズムを実装しています。私が抱えている問題は、多くの小さな分数を乗算しているため、確率がゼロに近づくことです。したがって、確率は最終的にゼロになります。これは、ドキュメントとトレーニングセット内にいくつかの単語があるためです。

このため、テキストを分類することができません。この問題を回避する方法はありますか?私の実装で何か問題がありますか?


...浮動小数点演算を回避できます。

msdn.microsoft.com/en-us/magazine/jj891056.aspx 簡単な答えがここにあります。
Roshan Mehta

回答:


14

このアンダーフローを回避する通常のトリックは、アイデンティティを使用して対数で計算すること つまり、確率を使用する代わりに、対数を使用します。それらを乗算する代わりに、それらを追加します。

logi=1npi=i=1nlogpi.

あまり一般的ではない別のアプローチは、製品を手動で正規化することです。浮動小数点数 1つだけ保持する代わりに、浮動小数点数(たとえば)とような負の指数ます。各操作の後、結果の数値を正規化します。pp0[1,2)xp=p02x


2
このコンテキストでlogsumexpトリックを注意することも有用です:en.wikipedia.org/wiki/LogSumExp
ビット単位の
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.