最近阅读《机器学习实战》这本书中的朴素贝叶斯中的代码对一部分内容有点疑问,不知道是作者写错了还是我理解错了
作者计算条件概率的时候,对于一个文档来说他只统计词有没有出现,而没统计出现多少次,并且多项式模型平滑处理(后面改进但是平滑处理为什么加2?) 也要分母加上词典不同单词的总数。所以我把自己的认为正确的代码保存在这里以后再看
- 计算公式:$p(c_i|w) = \frac{p(w|c_i)p(c_i)}{p(w)}$
- 其中分母 p(w) 在计算的时候都相同,所以只需要计算分子
$p(w|c_i)p(c_i)$ - 条件概率
$p(w|c_i) = p(w_0|c_i)p(w_1|c_i)...p(w_n|c_i)$
- 多项式模型以词为粒度
- 先验概率
$P(c_i) = \frac{类c_i下文档总数}{所有训练样本的文档总数}$ (两者相同) - 条件概率
$p(w_j|c_i) = \frac{类c_i下单词w_j在所有文档中出现过的次数之和+1}{类c_i下单词总数+m}$ 其中m是词表的长度,也就是总训练样本中所有不重复单词的数量
- 伯努利模型以文件为粒度
- 先验概率
$P(c_i) = \frac{类c_i下文档总数}{所有训练样本的文档总数}$ (两者相同) - 条件概率
$p(w_j|c_i) = \frac{类c_i下包含单词w_j的文档数+1}{类c_i下文档总数+n}$ 其中n是类别数量,也就是我们训练样本一共有多少种不同的类别
编号 | 文档 | 类别(love?) |
---|---|---|
1 | I love china | yes |
2 | china is beautiful | yes |
3 | china china love | yes |
4 | stupid china | no |
5 | bad china | no |
词典 {I, love, china, is, beautiful, stupid, bad}
测试文档 china china love stupid
- 多项式模式模型
故该文档属于yes
- 伯努利模型
故该文档属于yes