贝叶斯法则web
贝叶斯定理是用来作什么的?简单说,几率预测:某个条件下,一件事发生的几率是多大?svg
wiki
把为何要作这个定理谈的很清楚,是为了覆盖逆概的场景:3d
在贝叶斯写这篇文章以前,人们已经可以计算“正向几率”,如“假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的几率是多大”。code
而一个天然而然的问题是反过来:“若是咱们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色以后,那么咱们能够就此对袋子里面的黑白球的比例做出什么样的推测”。这个问题,就是所谓的逆概问题。orm
事件B发生的条件下,事件A发生的几率为:
xml
同理可得,事件A发生的条件下,事件B发生的几率为:blog
很容易推导获得:事件
假设若P(A)≠0,那么就能够获得用来预测几率的贝叶斯定理了:图片
这个定理显然是能够推导到多个条件的,好比在2个条件的状况下:get
假设 100%
的恐怖分子都相信某宗教,而某人相信某宗教,并不表明此人 100%
是恐怖分子,还须要考虑先验几率,假设全球有 7万
恐怖分子(全球人口 70亿
),假设全球有 1/3
的人口相信某宗教,那么这我的是恐怖分子的几率是多少?
解:
咱们要求解的是这个几率: P(恐怖分子|信某教)
套用公式,获得 :
P(恐怖分子|信某教)
= P(信某教|恐怖分子)
P(恐怖分子)
/ P(信某教)
= 100%
* (7万人/70亿人)
/ (1/3)
= 0.003%
也即十万分之三的几率。
延展开去,从数学理论上讲,民主党不针对某个信教人群是对的,可是题目中设定 100%
的恐怖分子信某教,这个假设就比较…
假设一个常规的检测结果的敏感度与可靠度均为 99%
,即吸毒者每次检测呈阳性 (+)
的几率为 99%
。而不吸毒者每次检测呈阴性 (-)
的几率为 99%
。假设某公司对全体雇员进行吸毒检测,已知 0.5%
的雇员吸毒。请问每位检测结果呈阳性的雇员吸毒的几率有多高?
解:
咱们要求解的是这个几率: P(吸毒|检测呈阳性的雇员)
套用公式,获得 :
P(吸毒|检测呈阳性雇员)
= P(检测呈阳性雇员|吸毒)
P(吸毒)
/ P(检测呈阳性雇员)
= 99%
* 0.5%
/ [P(检测呈阳性雇员∩吸毒)
+ P(检测呈阳性∩不吸毒)]
= 99%
* 0.5%
/ [P(检测呈阳性雇员|吸毒)
* P(吸毒)
+ P(检测呈阳性|不吸毒)
* P(不吸毒)]
= 99%
* 0.5%
/ [99%
* 0.5%
+ 1%
* 99.5%]
= 0.3322
也就是说,尽管吸毒检测的准确率高达 99%
,但贝叶斯定理告诉咱们:若是某人检测呈阳性,其吸毒的几率只有大约 33%
,不吸毒的可能性比较大。
不过也要注意,检测的准确率高低,十分影响结果的几率,若是检测精度达到 99.9%
,那么检测呈阳性的雇员吸毒的几率就上升到了 83.39%
。
这是 Paul Graham 在 《黑客与画家》 中提到的办法。这个问题其实能够倒推,咱们要求解的是这个几率: P(垃圾邮件|检测到某种特征)
。
这个某种特征能够是 关键词,能够是 时间,能够是 频次,能够是 邮件附件类型 …包括以上各类特征 混合 的特征等等。
咱们先用最简单的 关键词 来作推测,根据我我的的经验,一个中国式垃圾邮件极可能会包含两个字:发票 。好,那么咱们要求解的一封邮件是否是垃圾邮件的几率就变成 P(垃圾邮件|检测到“发票”关键词)
,根据贝叶斯定理
P(垃圾邮件|检测到“发票”关键词)
= P(检测到“发票”关键词|垃圾邮件)
/ P(检测到“发票”关键词)
好,这里遇到了一个问题,咱们怎么知道垃圾邮件里出现 发票 关键词的几率?
怎么知道在全部邮件里出现 发票 关键词的几率?理论上,除非咱们统计全部邮件,不然咱们是得不出的。这时候,就得作个妥协,在工程上作个近似,咱们本身找到必定数量的真实邮件,并分为两组,一组正常邮件,一组垃圾邮件,而后进行计算,看 发票 这个词,在垃圾邮件中出现的几率是多少,在正常邮件里出现的几率是多少。
显然,这里的训练数量大一些的话,计算获得的几率会更逼近真实值。 Paul Graham 使用的邮件规模,是正常邮件和垃圾邮件各 4000封
。若是某个词只出如今垃圾邮件中, Paul Graham 就假定,它在正常邮件的出现频率是 1%
,反之亦然,这样作是为了不几率为 0
。随着邮件数量的增长,计算结果会自动调整。
这样的话,将公式继续分解为以下:
P(垃圾邮件|检测到“发票”关键词)
= P(检测到“发票”关键词|垃圾邮件)
/ P(检测到“发票”关键词)
= P(检测到“发票”关键词|垃圾邮件)
/ [P(检测到“发票”关键词∩垃圾邮件)
+ P(检测到“发票”关键词∩正常邮件)]
= P(检测到“发票”关键词|垃圾邮件)
/ [P(检测到“发票”关键词|垃圾邮件)
/ P(垃圾邮件)
+ P(检测到“发票”关键词|正常邮件)
/ P(正常邮件)]
就又能够根据训练模型获得的几率,进行初始值计算了。此后,能够经过大量用户将垃圾邮件标注为正常邮件,正常邮件挪到垃圾邮件的动做,进行反复训练纠正,直至逼近一个合理值了。
不过这里还涉及到一个问题,就是单个关键词的几率(单个条件)不管如何再高,这封邮件仍然有可能不是垃圾邮件,因此在此处应用贝叶斯定理时,咱们显然要用到多个条件,也就是计算这个几率:
P(垃圾邮件|检测到“A”关键词,检测到“B”关键词,检测到"C",...)
Paul Graham 的作法是,选出邮件中 P(垃圾邮件|检测到“X”关键词)
最高的 15个词
,计算它们的联合几率。(若是关键词是第一次出现,Paul Graham 就假定这个值等于 0.4
,也即认为是negative normal
)。