【发布时间】:2016-10-04 06:52:03
【问题描述】:
我编写了一个朴素贝叶斯分类器,但它似乎并没有特别好用。数单词等不是问题,但概率是。
我一直使用的方法从this book 的第 180 页开始 但我将使用wiki article 中的术语来使其更加通用。
培训
通过训练,我正在为某个类别中出现的每个单词创建一个概率:
for category in categories:
for word in category_vocabulary[category]:
word_probability[category][word] = (category_vocabulary[category][word] + 1) / (total_words_in_category[category] + len(vocabulary))
所以我得到一个词在一个类别中出现的总次数,加一个,然后除以一个类别中的总词数,再加上词汇表的大小(不同的词)。这是 P(xi|Ck)
我还计算了一个类别的概率p(Ck),category_probability,简单来说就是一个类别中的词数除以所有类别中的词数
for category in categories:
category_probability[category] = total_words_in_category[category] / sum(total_words_in_category.values())
分类
为了分类,我循环遍历待分类文档的所有标记,并计算文本中所有单词的 word_probability 的乘积。
for category in categories:
if word in word_probability[category]:
if final_probability[category] == 0:
final_probability[category] = word_probability[category][word]
else:
final_probability[category] *= word_probability[category][word]
最后为了计算分数,我将其乘以类别概率
score = category_probability[category] * final_probability[category]
这个分数似乎完全错误,我不知道该怎么办。当我查看其他人的方法时,它们似乎涉及一些日志和指数,但我不确定它们如何与本书和 wiki 文章相匹配。
任何帮助都将不胜感激,因为我想我做错了什么对于更了解它的人来说有些明显。
【问题讨论】:
标签: python machine-learning naivebayes