BayesRule 贝叶斯规则:
holy grail of probabilistic inference ---that’scalled Bayes rule 概率论的 圣杯---贝叶斯规则
以一个癌症的例子进行解释cancer example:
假如有一种癌症,它发生率为总人口的1%,
对于这种癌症可以进行检查(test):
若得了这种特定癌症,检查结果90%可能是呈阳性的--这通常叫做测试的敏感性(sensitivity)
但是有时候你并没有患癌症,检查结果仍可能呈阳性,所以我们假设,若你没患上这种特定癌症,有90%的可能性是成阴性,即阳性的概率是10%-- 这通常叫做特异性(specitivity)
问题:没有任何症状的情况下你进行了检查,检查结果成阳性,你认为患上这种特定癌症的可能性是多少?
我自己的解答过程,也就是数学运算思维:结合图形
首先我们想一下整个人类中 检查出阳性的概率为0.01*0.9+0.99*0.1=0.108;假设人类总数为1000,那么检查出是阳性的人共有108人(红线区内);其中患癌症的且呈阳性的人有0.01*0.9*1000=9;那么在总的阳性结果中 患癌症的概率是 9/108=0.83333
总结一下上面的计算过程,同时引出贝叶斯规则的本质:先验概率(prior probability))、一项测试(test)和它的敏感性(sensitivity)和特殊性(specificity)、归一化(normalize)、后验概率(posterior probability)
贝叶斯法则:是将测试中的某些证据加入你的先验概率以便获得后验概率,并进行归一化
具体过程:仍以癌症例子做示范
首先我们知道
癌症的先验概率是0.01,检验结果是阳性的概率是0.9(敏感性证据)
非癌症的先验概率是0.99,检验结果是阳性的概率是0.1(特殊性证据)
然后我们将先验概率与证据相乘得到第一对后验概率Posterior,也叫作joint联合概率:
P(C, Pos) = P(C)• P(Pos|C)=0.009
P(ℸC, Pos) = P(ℸC)• P(Pos|ℸC)=0.099
这两个概率是以测试结果(阳性)的情况下考虑的,但是这两个概率相加并不等于1。
让我们进一步规范化 :即归一化(通过一种手法,使概率比例保持不变,但是确保它们相加之和为1)归一化分为2步:我们只需要把这些数字归一,比例保持不变,但是确保它们相加之和为1
1、计算这两个数字的和,0.099+0.009 = 0.108 代表测试结果为阳性的总概率
2、计算归一化的后验概率,即用之前的联合概率(joint)除以上面的概率和
贝叶斯规则图 P(C, Pos) +P(ℸC, Pos) = 1
贝叶斯法则的应用:比如text learning--文档学习
例子:邮件辨认
假设有两个人:Chris 和 Sara,两个人都写了很多电子邮件
为了简单起见,假设这些邮件仅包含3个词语: 爱(love)、交易(deal) 和生活(life)
两个人的区别在于 使用这些词的频率
为了简单起见,假设Chris喜欢谈论交易(deal)那么他的词语中有80%涉及交易,且他谈及生活和爱的概率都为0.1
Sara更多的谈及爱(0.5),较少的谈及交易和生活,分别占0.2和0.3
朴素贝叶斯可以做的是:基于随机邮件 确定邮件的发送人。
测试1:现在有一封邮件谈及 爱和生活,事先假设两个人的先验概率都是0.5。
这个测试比较简单 直观地(intuitively)看,是Sara发的可能性更大,因为Chris谈及love和life的概率本身就很低,同时出现的概率就更低。
那么看下一个测试2:现在有一封邮件谈及 生活和交易,仍事先假设两个人的先验概率都是0.5。
这个测试就没有上个那么容易辨别,我们使用贝叶斯规则 求出后验概率
joint:
归一化:
Chris的概率为 0.57,概率更高些。
为何朴素贝叶斯很朴素
朴素贝叶斯 能让你从文本源中鉴别哪个标签更有可能,常用于 监督学习。
你可以用这个方法判断人或新闻资源或者其他什么。
之所以叫做朴素贝叶斯是因为它忽略了一件事,词序,因为这个乘积没有考虑词序,而语句、短语等是有词序的,如果随意将单词重新排序,那句子是没有任何意义的,没有注意到词序,所以贝叶斯并没有真正理解这个文本,它只能把词的频率当成一种分类方法
优势:1、非常易于执行 2、它的特征空间非常大(两万-二十万英文单词之间)3、运行非常容易,非常有效
缺点:1、它会与间断,由多个单词组成且意义明显不同的词语不太适合(比如用朴素贝叶斯搜索 芝加哥公牛,它可能分为芝加哥和公牛两个词去查询,而不是芝加哥公牛队)
所以 我们要具体根据想要解决的问题,以及必须要解决的数据集,选择合适的算法
不可以把监督分类算法当作黑匣子,而是把它们当作成一种理论性理解关于算法如何运行,以及是否适合你想要解决的问题,
分类器训练完毕之后,需要进行测试(任何项目中最好都要留下10%的数据作为测试数据)
如果测试结果表现的不尽如意,它可能就是错误的算法或者是错误的参数