1. rindo

    対数部分の説明を追加

    rindo
Changes in body
Source | HTML | Preview
@@ -113,11 +113,11 @@
* ラプラススムージング
* 対数をとる
-#### ラプラススムージング
+#### <ラプラススムージング>
`+1`してるだけです。 `ゼロ頻度問題` というのがあるらしいです。 これは何かというと、先ほど P(doc|cat)を単語の出現確率の総乗で表したと思うのですが、積ということは1つ`0` があると、かけて0なので全体で0になってしまいます。
例をあげると、 「IT」というカテゴリで学習していたときに学習データではなかった新規の「Python」という単語がでてきたとしましょう。そうすると..
@@ -141,10 +141,38 @@
機械学習初心者がナイーブベイズに手を出してみる (2) - 実装編
で実装したいと思います。
+#### <対数をとる>
+
+サンプルデータでは、大したことないですが実際の計算に当てはめてみると `P(word|cat)`の分母が非常に大きくなってしまうことがあります。
+
+理由は、 単語数が非常に多くなる可能性があるからです。そのようなときにアンダーフローを起こしてしまう可能性があります。
+
+アンダーフローとかオーバーフローの逆で、小数点以下が大きくなりすぎて扱えなくなってしまうことです。
+
+そこで、対数の登場です。 対数をとると同じ底の足し算に置き換えることができるので対数をとって足し算化しても結果は同じになります。
+
+なので、以下を対数をとる形に変えます。
+
+``` math
+\prod_{i=0}^k P(word_k|cat)
+```
+
+```math
+\prod_{i=0}^k \log P(word_k|cat)
+```
+
+これらを総合して、最終的な式は以下になります。
+
+```math
+\log P(cat) + \prod_{i=0}^k \log P(word_k|cat)
+```
+
+参考 : [対数(LOG)の計算と公式!これでもうバッチリ!!](http://kenyu.red/archives/3132.html)
+
#### 参考
以下のサイトを非常に参考にさせていただきました。ありがとうございました。
* [ナイーブベイズを用いたテキスト分類](http://aidiary.hatenablog.com/entry/20100613/1276389337)