Machine learning NaiveBayes应该把词汇表中的所有单词都翻成倍数吗

Machine learning NaiveBayes应该把词汇表中的所有单词都翻成倍数吗,machine-learning,probability,text-classification,naivebayes,probability-theory,Machine Learning,Probability,Text Classification,Naivebayes,Probability Theory,我在文本分类中使用朴素贝叶斯 假设我的词汇表是[“苹果”、“男孩”、“杯子”],类标签是“垃圾邮件”或“火腿”。每个文档都将包含在三维0-1向量中。例如,“苹果男孩苹果”将转换为[1,1,0] 现在我已经从训练示例中计算了条件概率p(“苹果”|“垃圾邮件”)、p(“苹果”|“火腿”)、p(“男孩”|“垃圾邮件”)等等 要测试文档是垃圾邮件还是火腿,如“apple boy”->[1,1,0], 我们需要计算p(features | classLabel) 对测试向量[1,1,0]使用条件独立性 我

我在文本分类中使用朴素贝叶斯

假设我的词汇表是[“苹果”、“男孩”、“杯子”],类标签是“垃圾邮件”或“火腿”。每个文档都将包含在三维0-1向量中。例如,“苹果男孩苹果”将转换为[1,1,0]

现在我已经从训练示例中计算了条件概率p(“苹果”|“垃圾邮件”)、p(“苹果”|“火腿”)、p(“男孩”|“垃圾邮件”)等等

要测试文档是垃圾邮件还是火腿,如“apple boy”->[1,1,0], 我们需要计算p(features | classLabel)

对测试向量[1,1,0]使用条件独立性

我知道这两个公式

(1) p(特征|“火腿”)=p(“苹果”|“火腿”)p(“男孩”|“火腿”)

(2) p(特征|“火腿”)=p(“苹果”|“火腿”)p(“男孩”|“火腿”)(1-p(“杯子”|“火腿”))

哪个公式是正确的?

我认为(2)是正确的,因为我们有3个特征(实际上是词汇表中的3个单词)。但我看到其他人使用(1)编写的代码。
虽然术语1-p(“cup”|“ham”)接近1,所以不会有太大的区别,但我想要确切的答案。

你的直觉是正确的,可能你写的代码也是正确的。然而,您的问题在于符号。(我必须承认,在一开始,很难对它进行概括。)你缺少的最重要的概念是随机变量(RV)

我使用
HAM
CUP
BOY
HAM
作为随机变量。有两个可能的事件,每个RVs可以采取
包含
(c)或
不包含
(nc)。文本包含boy的概率可以写成
P(boy=contains)
,而不包含单词的概率是
P(boy=notcontains)=1-P(boy=contains)

反过来,正确的公式是

P(FEATURES| HAM) =  P(CUP,BOY,APPLE|HAM) = P(CUP|HAM)P(BOY|HAM)P(APPLE|HAM)
最后一步是由于朴素贝叶斯假设。 要计算你要求的概率,你需要计算

 P(BOY=c,APPLE=c,CUP=nc|HAM) = P(BOY=c|HAM)P(APPLE=c|HAM)P(CUP=nc|HAM) 
                             = P(BOY=c|HAM)P(APPLE=c|HAM)(1-P(CUP=c|HAM))

事实上,这仍然是两个概率(不等于一),因为
HAM
可以占用两个值。

这是一个很好的论点!你的论点是正确的,因为特征是一个词向量(包含我们所有的词汇)。事实上,这两个公式都是正确的,但它们所指的“特征”是不同的。它们来自不同的模型,尽管它们都需要天真的假设。Andrew Ng的机器学习课程讨论了这个问题。你能给我指一下你所指的吴家富讲稿中的那一部分吗?在严格的数学表示法中,第一个公式几乎不可能适合您的任务。的第2节。您可以只按CTRL+F搜索“朴素贝叶斯”。当我阅读python中的机器学习代码时,出现了这个问题。笔者认为作者对这两个公式可能不太了解,我在Andrew Ng的《机器学习》课程中对这一问题进行了详细的讨论。仔细阅读。这两个公式都是正确的,但它们所指的“特征”是完全不同的。他们来自不同的模式。你能给我指一下机器学习的页面吗?可能会很好奇。请阅读MLiA第67-73页。代码是正确的(除了拉普拉斯平滑,在我看来,拉普拉斯平滑应该是#word而不是2)。他使用了第一个公式,但解释为第二个公式。