朴素贝叶斯(Naive Bayes)
在上一篇介绍的高斯判别分析模型,特征向量
X
是连续的实向量。对于离散的特征值来说
现在我们需要建立一个模型,来识别一封邮件是否是垃圾邮件。邮件分类是众多文本分类问题中的一种。
在开始建立模型之前,我们需要特征值
xi
来表示邮件的内容。首先我们要指定一个特征向量,其长度就是字典中单词的个数。如果在邮件中,该单词出现了,那么就会在向量中对应的位置(比如第i维位置)上置为1(即
xi=1
),否则都为0。
为了建立
p(x|y)
模型,我们假设
xi
关于
y
的条件独立,这个假设我们称之为朴素贝叶斯假设(Naive Bayes (NB) assumption),生成的算法就是朴素贝叶斯分类器(Navie Bayes Classifier)。
那么如果我们有50000个单词,在条件独立的情况下,可以得到:
我们的模型有三个参数,分别是 ϕi|y=1=p(xi=1|y=1),ϕi|y=0=p(xi=1|y=0),ϕy=p(y=1) 。一般情况下,给定的训练样本是 {(x(i),y(i));i=1,⋯,m} 。我们写下似然函数:
针对参数我们算出最大似然函数:
有了上面的结果我们就可以算出 p(y=1|x)=p(x|y=1)p(y=1)p(x) 了。
拉普拉斯平滑(Laplace smoothing)
朴素贝叶斯算法针对很多情况都能有很好的表现,这里有一个好方法让算法表现更佳,尤其针对文本分类问题。
当训练完一个文本分类模型后,针对训练样本中没有出现的而在判断新文本时出现的文本又有何方法来对训练进行优化呢?
针对这种在训练样本中没有出现过的新文本,他们对模型的判断有什么样的影响?
比如出现了一个训练样本中没有出现的单词,这个单词对应到特征向量
X
中是第3500位。那么就有如下数学表示:
即表示这个字符在训练的模型中,没有对预测的结果产生任何影响,因为它在训练集中没有出现过,所以得到的结果都是0。
如果这种情况出现了,那么在预测结果时就会出现如下情况:
因为上面的乘积中每一项 ∏ 中都包含有 p(x3500|y)=0 ,这样的结果显然是无法做出准确的预测的。
由上一节我们知道:
当遇到一些 ϕj 会算出零的结果,这样是不正确的,为了避免这个情况的发生,我们就需要用到拉普拉斯平滑法,把上面的式子写成:
这样就避免出现了无法判断的概率为0的情况。
在拉布拉斯平滑变换的情况下,把参数都写成如下形式: