朴素贝叶斯在文本分类方面使用比较广,即使文本单词之间在现实生活中并不是独立的变量,但是使用朴素贝叶斯进行分类还是能达到很好的效果。
朴素贝叶斯的一个实例就是分辨邮件是否是垃圾邮件,其过程如下。
1.首先我们是存在一定的训练集供我们来建立模型。在已有的实例集里,我们通常是用一部分来作为训练集,剩下的部分作为测试用。
2.从训练集里,我们要计算如下几个参数:
正常邮件的概率,即P(Y=0)
垃圾邮件的概率,即P(Y=1)
每个单词Xi出现在正常邮件里的概率,即Pi(Xi | Y=0)
每个单词Xi出现在垃圾邮件里的概率,即Pi(Xi | Y=1)
3.根据公式,我们来分辨一封邮件是否为垃圾邮件:
我们要做的就是去找到此封邮件里的单词(剔除掉训练集之外的单词)对应的第二步里计算的四个参数。
这里会出现一个问题,当某个单词只在正常邮件或者垃圾邮件之一出现时,那么必定有一项P(Xi | Y=0/1)会为0,导致整个算式都为零。为了避免此种情况,采用的办法是拉普拉斯顺滑,即将单词出现的次数以及单词总数同时加一,避免了全部为零的特殊情况。
另外一个问题是,当以上情况的单词比较多时,那么相乘后概率就会很小很小,趋近于零,此时的一个解决方案就是取对数,让乘法变为加法,就能解决了。
最后,我们只要比较:
P(Y=0) * P(X1 | Y=0) * P(X2 | Y=0) * P(X3 | Y=0) *….. *P(Xn | Y=0)
P(Y=1) * P(X1 | Y=1) * P(X2 | Y=1) * P(X3 | Y=1) *….. *P(Xn | Y=1)
以上两项的大小,就可以判断此封邮件是否是垃圾邮件了。
朴素贝叶斯在文本分类的应用里还有很多。 比如中文断句,根据断后的词出现的概率大小,就可以很准确地进行断句了。 还比如输入法里的错拼也能搜出正确的词,根据输入的字母及其周边可能出现的字母出现的概率,可以推荐出最符合想输入的词组。