Jack-Cherish/Machine-Learning

关于朴素贝叶斯代码的问题

imfence opened this issue · 0 comments

您好,在您的代码bayes.py中,第127行对应元素相乘应该不是这么写的。应该是vec2Classify和p1Vec中对应位置的元素相乘,再将结果加起来。因为vec2Classify代表一个0-1矩阵,0表示单词未出现,1表示单词出现。而计算这个值应该是如果第N个单词出现了,那么将p(W_N|1)考虑进去,而未出现的单词并不用考虑进去。

另外我在阅读原书时有一个小小的疑惑,为什么朴素贝叶斯不是按照下面这种方式计算单词出现的概率:
例如我们考虑条件概率p(W_i|C1)时,原书只考虑了W_i等于1时的概率,而没有考虑W_i等于0时的概率,为什么不是分别计算出p(W_i=1|C1)和p(W_i=0|C1),然后根据测试集中,某个单词所在的位置W_i是否为0计算。如假设某一个向量为(0,1,1,0,0),类别为1
那么计算过程为:p(1|W_1=0,W_2=1,W_3=1,W_4=0,W_5=0)=p(W_1=0|1)*p(W_2=1|1)...p(W_5=0)*p(1)/p(W)

而原书的计算过程为:p(1|W_2=1,W_3=1)=p(W_2=1|1)*p(W_3=1)*p(1)/p(W)
也就是原书并没有考虑某一项为0的条件概率,请问为什么会是这么做的?

感谢!


不好意思,我明白我提出的那个问题了,原书认为p(W_1=0|1)=1,所以自然省略了这一项