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

假设我的词汇是 ["apple","boy","cup"] 并且类标签是 "spam"或 "ham"。每个文档都将覆盖一个 3 维 0-1 向量。例如,“apple boy apple apple”将转换为 [1,1,0]

现在我已经从训练示例中计算了条件概率 p("apple"|"spam")、p("apple"|"ham")、p("boy"|"spam")...等。

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

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

我知道 这两个公式

(1) p(features|"ham") = p("apple"|"ham")p("boy"|"ham")

(2) p(features|"ham") = p("apple"|"ham")p("boy"|"ham")(1-p("cup"|"ham"))

哪个公式是对的?

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

最佳答案

你的直觉是对的,可能也是你写的代码。但是,您的问题出在符号上。 (我需要承认,一开始很难将头围绕它。)您缺少的最重要的概念是随机变量(RV)

我使用 HAMCUPBOYHAM 作为随机变量。有两种可能的事件,每个 RV 可以采用 contains (c) 或 not contains (nc)。一个文本包含男孩的概率可以写成 P(BOY=contains) 而它不包含这个词的概率是 P(BOY=not contains)= 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))

实际上,这仍然是两个概率(总和不为 1),因为 HAM 可以采用两个值。

关于machine-learning - 朴素贝叶斯是否应该将词汇表中的所有单词相乘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33720659/

10-12 19:27