在阅读了以下论文后,我开始对在 C# 中执行此操作感兴趣:
http://www.cs.washington.edu/homes/brun/pubs/pubs/Kiddon11.pdf
我还查看了http://www.cs.rpi.edu/academics/courses/fall03/ai/misc/naive-example.pdf作为我实施的具体示例。
我现在有一个有效的实现,但我想确保我正确地接近它。我只想拥有一个可靠的朴素贝叶斯分类器(unigram)。
问题陈述和设置
我正在使用两组数据,一个是“这就是她所说的”的句子列表和一个带有“这就是她所说的”后缀的句子列表。
接下来我解析所有句子中的所有单词并记录每个单词以及在两组中的每一个中找到它的次数,所以我最终可能会得到如下所示的数据:
Word PositiveCount NegativeCount
wet 23 4
hard 30 5
haiti 0 20
to 60 77
我遍历所有单词并使用以下和\Pr(\text{Negative}|\text{<word>})我在上面的示例文件中发现:
P(Positive|wet) = (23 + p * m) / ((23 + 4) + m)
P(Negative|wet) = (4 + p * m) / ((23 + 4) + m)
其中m 是等效样本大小,p 是先验估计。然后为了检查一个未知的句子,看看它是否是一个 TWSS,我迭代了句子中的每个单词,并将它们的正 [概率分布?] 相乘,然后将所有这些乘以 p。对负数做同样的事情。然后,如果正数更大,我说这句话是“这就是她说的”。
问题
目前我使用表示正面和负面。我觉得我可以做得更好。这就是贝叶斯与常客的事情吗?我将如何为获得更好的数字?
另外,我正在使用估计。我应该这样做吗?我应该什么?变大/变小有什么影响?
超级小问题:关于从哪里获取样本数据的建议将是一个奖励。