连载的上一篇文章,我们在介绍贝叶斯拼写检查器的时候,得出了如下的正比公式:
P(h|D) ∝ P(h) * P(D|h)
即为了比较在输入错误的单词 D
的情况下,猜测用户可能输入 h
的概率大小,我们需要求得 P(h)
和 P(D|h)
的概率。而关于比较 P(h) * P(D|h)
也就引出了我们接下来的 2 种模型比较理论:最大似然估计和奥卡姆剃刀。
最大似然估计
对于最大似然估计,最符合观测数据的最有优势。也就是输入 h
时错误地输入成了 D
的概率 P(D|h)
越大,越有优势。
举个极端的例子,掷一个硬币,观察到的是“正”,根据最大似然估计的精神,我们应该猜测这枚硬币掷出“正”的概率是 1,因为这个才是能最大化 P(D | h)
的那个猜测。
奥卡姆剃刀
对于奥卡姆剃刀而言,先验概率 P(h)
较大的模型优势越大。
假设有这样一个问题:如果平面上有 N 个点,近似构成一条直线,但并没有精确地位于一条直线上。这时我们既可以用直线来拟合,称之为 模型 1,也可以用二阶多项式曲线 模型 2 拟合,也可以用三阶多项式 模型 3...
特别地,用 N-1 阶多项式便能够保证肯定能完美通过 N 个数据点,也就是拟合所有数据点。那这些可能的模型之中到底哪个是最靠谱的呢?
如果使用奥卡姆剃刀:越是高阶的多项式越是不常见,我们可以很轻松的知道模型 N-1 阶多项式最不靠谱,这样的模型发生了严重的过拟合。
越是高阶的多项式越是不常见 这就是一个先验概率。
垃圾邮件过滤
接下来,我们再通过一个垃圾邮件过滤的实例来进一步理解贝叶斯公式、最大似然估计以及奥卡姆剃刀。
问题:给定一封邮件,判定它是否属于垃圾邮件。使用 D
来表示这封邮件,其中 D
由 N
个单词组成。我们用 h+
来表示垃圾邮件,h-
表示正常邮件。判断一封邮件是属于垃圾邮件还是正常邮件,也就是在比较 P(h+|D)
和 P(h-|D)
那个概率大。
根据贝叶斯公式,可以将上述两个逆向概率转换为:
P(h+|D) = P(h+) * P(D|h+) / P(D)
P(h-|D) = P(h-) * P(D|h-) / P(D)
由于 P(D)
相同,所以只需要比较:
P(h+|D) ∝ P(h+) * P(D|h+)
P(h-|D) ∝ P(h-) * P(D|h-)
先验概率 P(h+)
和 P(h-)
很容易就可以求出来,只需要计算一个邮件库里面垃圾邮件和正常邮件的比例就行了。下面,我们来 P(D|h+)
和 P(D|h-)
的计算。
我们前面说 D
表示我们收到的邮件,由 N
个单词表示:d1, d2, d3,...dn
,则 P(D|h+) = P(d1,d2,..,dn|h+)
。
P(d1,d2,..,dn|h+)
就是说在垃圾邮件当中出现跟我们目前这封邮件一模一样的一封邮件的概率是多大!因此,P(d1,d2,..,dn|h+)
又可以表示为 P(d1|h+) * P(d2|d1, h+) * P(d3|d2,d1,h+) *..
但 P(d1|h+) * P(d2|d1, h+) * P(d3|d2,d1,h+) *..
公式求解起来显然是不现实的,我们可以利用朴素贝叶斯的思想假设单词 d1,d2,d3,...dn
之间相互独立,互补影响。那么 dn
出现也就和 dn - 1
出现毫无关系,因此可以将上式继续简化为 P(d1|h+) * P(d2|h+) * P(d3|h+) * ..
最后,对于 P(d1|h+) * P(d2|h+) * P(d3|h+) * ..
只要统计 dn
这个单词在垃圾邮件中出现的频率即可,即词频的统计。
注:朴素贝叶斯假设特征之间是独立,互不影响的。但实际上,特种之间是会存在一些联系的,只是我们会在联系非常小的情况下,忽略它。这样朴素贝叶斯的假设就可以简化和求解实际问题了。
网友评论