赞
踩
本文属于贪心NLP学习笔记系列。本篇介绍朴素贝叶斯。
垃圾邮件里经常出现“广告”,“购买”,“产品”这些单词。也就是p(“广告”|垃圾)>p(“广告”|正常),p(“购买”|垃圾)>p(“购买”|正常)……这符合我们判断习惯。那么这些概率怎么计算?
具体案例1如下:
下图计算了购买在垃圾邮件和正常邮件里出现的概率。
根据假设:正常邮件的单词总数为24*10,垃圾邮件为:12 *10
正常邮件含有“购买”词的概率多少?p(“购买”|正常)=3/240
垃圾邮件含有“购买”词的概率多少?p(“购买”|垃圾)=7/120
和上面一样,再看下“物品”这个关键词的概率
把词库中每个单词都按这个模式计算一遍,
先验就是我们已知的信息。
插播数学背景知识:朴素贝叶斯定理
条件独立性:
给定第三个事件P(X,Y|Z) =P(X|Z)*P(Y|Z) ,则称X和Y是条件独立事件,独立于Z
也就是说,当Z发生时,X发生与否与Y发生与否是无关的。
看到这里,我总是觉得李文哲老师的优秀之处,很多数学公式讲的很清楚,功底深厚。
判断新邮件是否是垃圾邮件:
需要判断一个邮件不是垃圾邮件,那么就要满足:
p ( 正 常 ∣ 内 容 ) > p ( 垃 圾 ∣ 内 容 )
上面根据贝叶斯公式,下面根据条件独立推导。
这里面每一项我们都在朴素贝叶斯模型中训练好了,同理,p(内容|垃圾)也可以这样计算,那么最终二者可以进行比较并判断是否是垃圾邮件。
假设我们有的邮件数据:供6条数据,预测新邮件?
第一步、训练模型
先看先验:正常邮件与垃圾邮件各占一半=1/2;
接下来计算正常单词在正常邮件或者垃圾邮件出现的概率,计算完之后基本就是训练好了。
构建词库:维度为15
接下来计算每一个词在不同分类中的条件概率,为了防止出现一些概率为0的情况,朴素贝叶斯一般采用add-one smooth策略:
第二步、预测分类
p(垃圾|邮件)>or <P(正常|邮件),先把预测推导出来的公式贴一遍:
p(内容∣正常)p(正常)>or<p(内容∣垃圾)p(垃圾)
其中p(正常),p(垃圾)是先验概率,剩余的把上一步的单词的概率放入。计算结果就是要比较结果的大小,这个明显左侧大说明该邮件是垃圾邮件。
这里注意:
当词库中词很多,每个词语的条件概率会很小,连乘后会得到underflow的错误,可以在每个项前面加上log,再来比较。
log一来是严格递增函数,不会因为加log改变相对大小。加log后连乘可以变连加,不会越乘越小。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。