朴素贝叶斯算法,简称NB算法,是贝叶斯决策理论的一部分,是基于贝叶斯定理与特征条件独立假设的分类方法。
贝叶斯理论是以18世纪的一位神学家托马斯·贝叶斯(Thomas Bayes)命名。通常,事件A在事件B(发生)的条件下的概率,与事件B在事件A(发生)的条件下的概率是不一样的;然而,这两者是有确定的关系的,贝叶斯定理就是这种关系的陈述。贝叶斯公式:
也可以认为A是类别,B是特征,于是可以表示为:
为了更形象地对贝叶斯定理进行说明,给大家举两个例子。
假设今天早上小明要出门,但是发现外面天空是多云状态,那么今天会不会下雨呢,或者说多云的情况下今天的降水概率是多少呢?
事件A:今天下雨
事件B:早上有云
事件 A|B:早上有云,今天下雨
事件 B|A:今天下雨,早上有云
P(A):今天下雨的概率
P(B):早上有云的概率
P(A|B):早上有云的话,今天下雨的概率
P(B|A):今天下雨的话,早上有云的概率
小明现在要计算的是今天早上有云,今天的降水概率是多少,即P(雨|云) = P(雨)·P(云|雨) / P(云)
假设:80% 的雨天早上是有云的,30% 的早上都是有云的,这几个月很干旱,平均每个月(30 天)下雨的天数是 6 天。
那么P(雨|云) = 20% * 80% / 30% = 5.333%。
即今天的降水概率为5.333%,几乎可以认为今天不下雨。
假阳性
和假阴性
的检测。有一天小明收到一束花,过了一会突然感觉全身发痒,于是小天去做了个简单的过敏检测:
真的过敏的人,检测会给“有”的概率是 90%
没有过敏的人,检测给“有”的概率是5%,这被称为假阳性
现在已知的条件是小明所在的市区中有 1% 的人有这种过敏,而小明去检测得到的结果是“有”,那么小天真正过敏的概率是多少呢?
P(过敏|有) = P(过敏) · P(有|过敏) / P(有)
观察公式发现,P(有)不知道,即我们不知道检测得到结果是“有”的一般可能性是多少。考虑一下如何计算P(有)。
根据已知条件可以得到:
1% 的人是真的过敏的,得到“有”的概率是 90%
99% 的人是没有过敏的,得到“有”的概率是 5%
所以P(有) = P(过敏)·P(有|过敏) + P(不过敏)·P(有|不过敏) = 1% × 90% + 99% × 5% = 5.85%
最终,小明计算得到了他真正过敏的概率:
P(过敏|有) = 1% × 80% / 5.85% = 13.68%。
可以维护一个骚扰电话号码、垃圾短信发送号码、垃圾邮件发送地址的黑名单。
如果某个垃圾短信发送者的号码并不在黑名单中,那这种方法就没办法拦截了。所以,基于黑名单的过滤,还不够完善,再继续看基于规则的过滤。
通过短信的内容,来判断是垃圾短信。预先设定一些规则,如果短信符合这些规则,就判定它是垃圾短信。规则可以有很多,比如:
可以综合多条规则进行判断。比如,满足2条以上才会被判定为垃圾短信;
或者每条规则对应一个不同的得分,某条短信的总得分超过某个闽值,才会被判定为垃圾短信。
以上两种过滤,比较符合我们的想法,也有广泛应用,如网站维护的IP白名单、黑名单,以及定义的防火墙规则,其实都是上面所讲的。
朴素贝叶斯定理通常应用于人工智能领域,最常见的是朴素贝叶斯分类算法,也就是接下来要实现的基于概率的过滤器,本质上是通过计算概率来判断。
对于一条短信,我们通常可以通过这个短信的内容进行判断是否为垃圾短信。对于计算机来说无法直接通过内容来判断,但是我们可以将短信内容中的一些特征项提取出来,供计算机判断。
通过分词算法可以将短信内容分割成由n个单词的组合,那么现在的问题就变成了包含这些单词的短信是垃圾短信的概率是多少。
P(是垃圾短信 | 单词1、单词2 ... 单词 n 同时出现) = ?%
我们使用朴素贝叶斯定理,将这个概率转换成其他三个概率来求解:
推导过程:
(是垃圾短信)
的值很容易计算,样本中垃圾短信数与样本总数之比即可得到。根据独立事件发生的概率计算公式:P(A*B) = P(A)*P(B)拆分为:
P(单词1、单词2 ... 单词 n 同时出现|是垃圾短信)=P(单词1|是垃圾短信)*P(单词2|是垃圾短信)*...*P(单词 n |是垃圾短信)。
P(单词i 出现在短信中 | 是垃圾短信)表示垃圾短信中包含单词i 这个单词的概率。
推导到这里,我们发现唯一不好计算的就是分母,那我们再次发散思维,我们可以分别计算一条短信是垃圾短信和非垃圾短信的概率,然后计算他们的倍数,如果倍数相差悬殊,那么我们就可以认为是垃圾短信。例如:
假设是垃圾短信的概率是p1
,不是垃圾短信的概率是p2
,这样一来,可以通过计算p1
与p2
的倍数关系来最终确定是否为垃圾短信,例如若p1
是p2
的十倍,那么可以认为短信一定是垃圾短信了。公式如下:
我们只需要计算p1/p2就能得出是否是垃圾短信了。
大家其实也看得出来,分母可以被约分约掉的。
实际上,我们可以结合三种不同的过滤方式的结果,对同一个短信处理,如果三者都表明这个短信是垃圾短信,才把它当作垃圾短信拦截过滤,这样就会更精准。同时,需要大量的实验,不断调整策略,并且需要权衡最终的准确率以及是否能把所有垃圾短信都找到。
"概率论只不过是把常识用数学公式表达了出来"---拉普拉斯。
之所以贝叶斯方法在机器学习中如此重要,就是因为人们希望机器人能像人那样思考,而很多问题是需要计算机在已知条件下做出最佳决策的决策,而贝叶斯公式就是对人脑在已知条件下做出直觉判断的一种数学表示。
朴素贝叶斯的主要优点有:
朴素贝叶斯的主要缺点有:
我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!
参考阅读: