在朴素贝叶斯中,当我们在测试集中有未知单词时,为什么还要使用拉普拉斯平滑呢?

机器算法验证 机器学习 分类 文本挖掘 朴素贝叶斯 拉普拉斯平滑
2022-02-07 19:25:48

我今天正在阅读朴素贝叶斯分类。我在 Parameter Estimation 的标题下阅读了 add 1 smoothing

指代一个类(例如 Positive 或 Negative),让指代一个标记或单词。cw

的最大似然估计P(w|c)

count(w,c)count(c)=counts w in class ccounts of words in class c.

的估计可能是有问题的,因为它会给我们提供未知单词文档的概率解决此问题的常用方法是使用拉普拉斯平滑。P(w|c)0

令 V 为训练集中的词集,在词集中添加一个新元素(表示未知)。UNK

定义

P(w|c)=count(w,c)+1count(c)+|V|+1,

其中指的是词汇表(训练集中的单词)。V

特别是,任何未知单词的概率

1count(c)+|V|+1.

我的问题是:为什么我们要为这个拉普拉斯平滑而烦恼呢?如果我们在测试集中遇到的这些未知词的概率明显几乎为零,即,将它们包含在模型中的意义何在?为什么不忽略并删除它们? 1count(c)+|V|+1

4个回答

假设您已经在 2 个类“Ham”和“Spam”(即它对电子邮件进行分类)上训练了 Naive Bayes 分类器。为简单起见,我们假设先验概率为 50/50。

现在假设您有一封电子邮件,您的分类器将其评为“Ham”,例如(w1,w2,...,wn)

P(Ham|w1,w2,...wn)=.90
P(Spam|w1,w2,..wn)=.10

到现在为止还挺好。

现在假设您有另一封电子邮件,它与上述电子邮件完全相同,只是其中有一个单词未包含在词汇表中。因此,由于该词的计数为 0,因此(w1,w2,...,wn,wn+1)

P(Ham|wn+1)=P(Spam|wn+1)=0

突然,

P(Ham|w1,w2,...wn,wn+1)=P(Ham|w1,w2,...wn)P(Ham|wn+1)=0
P(Spam|w1,w2,..wn,wn+1)=P(Spam|w1,w2,...wn)P(Spam|wn+1)=0

尽管第一封电子邮件被强烈归类为一类,但由于最后一个单词的概率为零,这第二封电子邮件可能被分类不同。

拉普拉斯平滑通过为两个类赋予最后一个词一个小的非零概率来解决这个问题,这样后验概率就不会突然下降到零。

你总是需要这种“故障安全”的可能性。

看看为什么要考虑训练样本中没有单词出现在测试句中的最坏情况。在这种情况下,根据您的模型,我们会得出结论,该句子是不可能的,但它显然存在造成矛盾。

另一个极端的例子是测试句“Alex met Steve”。其中“met”在训练样本中出现了多次,但“Alex”和“Steve”没有出现。您的模型会得出结论,这种说法很可能是不正确的。

忽略这些话是另一种处理方式。它对应于所有缺失变量的平均(积分)。所以结果是不一样的。如何?

假设这里使用的符号 其中是词汇表中的标记,是文档。

P(C|d)=argmaxCip(ti|C)P(C)P(d)argmaxCip(ti|C)P(C)
tid

假设令牌没有出现。而不是使用拉普拉斯平滑(来自于在多项式贝叶斯上施加狄利克雷先验),你总结出对应于说:我对未知令牌的所有可能性(有与否)进行加权投票.tktk

P(C|d)argmaxCtkip(ti|C)P(C)=argmaxCP(C)ikp(ti|C)tkp(tk|C)=argmaxCP(C)ikp(ti|C)

但在实践中,人们更喜欢平滑方法。与其忽略这些标记,不如给它们分配一个低概率,这就像在思考:如果我有未知的标记,那不太可能是我认为的那种文档。

如果您熟悉贝叶斯估计器,这个问题就相当简单,因为它是贝叶斯估计器的直接结论。

在贝叶斯方法中,参数被认为是一个量,其变化可以通过概率分布(或先验分布)来描述。

因此,如果我们将拾取过程视为多项分布,那么我们可以通过几个步骤来解决问题。

首先,定义

m=|V|,n=ni

如果我们假设的先验分布是均匀分布,我们可以计算它的条件概率分布为pi

p(p1,p2,...,pm|n1,n2,...,nm)=Γ(n+m)i=1mΓ(ni+1)i=1mpini

我们可以发现它实际上是 Dirichlet 分布,并且的期望是pi

E[pi]=ni+1n+m

的自然估计是后验分布的平均值。所以我们可以给出的贝叶斯估计量:pipi

p^i=E[pi]

您可以看到我们得出的结论与拉普拉斯平滑法相同。