朴素贝叶斯是不是应该将词汇表中的所有单词复数

Posted

技术标签:

【中文标题】朴素贝叶斯是不是应该将词汇表中的所有单词复数【英文标题】:Should Naive Bayes multiple all the word in the vocabulary朴素贝叶斯是否应该将词汇表中的所有单词复数 【发布时间】:2016-02-16 16:22:49 【问题描述】:

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

假设我的词汇是 ["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(特征|"火腿") = p("苹果"|"火腿")p("男孩"|"火腿")

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

哪个公式是正确的?

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

【问题讨论】:

当我阅读Machine Learning in Action关于python中的机器学习代码时会出现这个问题。我想作者可能对这两个公式不是很了解。 我在 Andrew Ng 的机器学习课程中发现了这个问题的详细讨论。详细阅读lecture notes。这两个公式都是正确的,但它们所指的“特征”却大不相同。它们来自不同的模型。 你能指出机器学习在行动中的页面吗?会很好奇。 阅读 MLiA 中的第 67-73 页。代码是正确的(期待拉普拉斯平滑,在我看来应该是#word而不是2)。但是作者没有很好地讨论它。他使用了第一个公式,但将其解释为第二个公式。 【参考方案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)

最后一步是由于朴素 Bays 假设。 要计算您要求的概率,您需要计算

 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 的机器学习课程讨论了这个问题。 course lecture notes 你能指点一下你所指的 Andrew Ng 讲义中的部分吗?在严格的数学符号中,第一个公式几乎不可能对您的任务正确。 lecture-notes-2 的第 2 部分。您只需按“CTRL+F”即可搜索“朴素贝叶斯”

以上是关于朴素贝叶斯是不是应该将词汇表中的所有单词复数的主要内容,如果未能解决你的问题,请参考以下文章

Bayes 朴素贝叶斯实现垃圾邮件分类

朴素贝叶斯分类算法预测具有属性的人是不是买电脑python

从Scratch在Python中的朴素贝叶斯分类

十三:朴素贝叶斯算法之检测webshell

朴素贝叶斯分类器

朴素贝叶斯文本分类错误结果