叶斯是机器学习的核心方法之一,贝叶斯方法源于他生前为解决一个“逆概”问题写的一篇文章,而这篇文章是在他死后才由他的一位朋友发表出来的。 在贝叶斯写这篇文章之前,人们已经能够计算“正向概率”,如“假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率是多大”。 而一个自然而然的问题是反过来:“如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测”。这就是所谓的逆概问题。 现实世界本身就是不确定的,人类的观察能力是有局限性的,我们日常所观察到的只是事物表面上的结果,比如从袋子中取球,我们往往只能知道从里面取出来的球是什么颜色,而并不能直接看到袋子里面实际的情况。这个时候,就需要提供一个猜测。 朴素贝叶斯是贝叶斯决策理论的一部分。
1、贝叶斯公式: 条件概率(Conditional probability),就是指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。 贝叶斯公式是用来描述两个条件概率之间的关系,比如 P(A|B) 和 P(B|A)。
从上图可以看出:P(A∩B) = P(A)*P(B|A)=P(B)*P(A|B)。 解释为:1)在事件B发生的情况下,事件A发生的概率就是P(A∩B)除以P(B) 2)在事件A发生的情况下,事件B发生的概率就是P(A∩B)除以P(A) 如上公式也可变形为:
或者也可以得到P(B|A)的计算,这公式也称为贝叶斯法则。通过已知的三个概率值来计算未知的概率值。在贝叶斯法则中,每个名词都有约定俗成的名称:
- P(A)是A的先验概率或边缘概率。之所以称"先验"是因为它不考虑任何B方面的因素,即在B事件发生之前,我们对A事件概率的一个判断。
- P(A|B)是已知B发生后A的条件概率,在B事件发生之后,我们对A事件概率的重新评估,也被称作A的后验概率。
- P(B|A)是已知A发生后B的条件概率,也被称作B的后验概率。
- P(B)是B的先验概率或边缘概率,也作标准化常量(normalized constant)
- P(B|A)/ P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。
- 后验概率=先验概率*调整因子
2、贝叶斯公式计算案例
举例1:
两个一模一样的容器,一号容器有30个红球和10个黑球,二号容器红球和黑球各20个。现在随机选择一个容器,从中摸出一各球,发现是红球。请问这个红球来自一号容器的概率有多大? 我们假定,A1表示一号容器,A2表示二号容器。由于这两个容器是一样的,所以P(A1)=P(A2),也就是说,在取出红球之前,这两个容器被选中的概率相同。因此,P(A1)=0.5,我们把这个概率就叫做"先验概率",即没有做实验之前,来自一号容器的概率是0.5。再假定,B表示红球,所以问题就变成了在已知B的情况下,来自一号容器的概率有多大,即求P(A1|B)。我们把这个概率叫做"后验概率",即在B事件发生之后,对P(A1)的修正。 根据条件概率公式, 已知P(A1)等于1/2,P(B|A1)为一号容器中取出红球的概率,为3/4,那么求出P(B)就可以得到答案。而P(B)为取得红球的概率,为5/8。 根据全概率公式:P(A1|B)=P(A1)*P(B|A1)/P(B)=3/5。 也就是说,取出红球之后,A1事件的可能性得到了增强。
举例2:
一座别墅在过去的 20 年里一共发生过 2 次被盗,别墅的主人有一条狗,狗平均每周晚上叫 3 次,在盗贼入侵时狗叫的概率被估计为 0.9,问题是:在狗叫的时候发生入侵的概率是多少? 我们假设 A 事件为狗在晚上叫,B 为盗贼入侵,则以天为单位统计,P(A) = 3/7,P(B) = 2/(20*365) = 2/7300,P(A|B) = 0.9, 按照全概率公式很容易得出结果:P(B|A) = 0.9*(2/7300) / (3/7) = 0.00058
举例3:
已知某种疾病的发病率是0.001,即1000人中会有1个人得病。现有一种试剂可以检验患者是否得病,它的准确率是0.99,即在患者确实得病的情况下,它有99%的可能呈现阳性。它的误报率是5%,即在患者没有得病的情况下,它有5%的可能呈现阳性。现有一个病人的检验结果为阳性,请问他确实得病的可能性有多大? 假定A事件表示得病,那么P(A)为0.001。这就是"先验概率",即没有做试验之前,我们预计的发病率。 再假定B事件表示阳性,那么要计算的就是P(A|B)。这就是"后验概率",即做了试验以后,对发病率的估计。P(A|B)=P(A)*P(B|A)/P(B)=0.001*0.99/0.05=0.0198。我们得到了一个惊人的结果,P(A|B)约等于0.019。也就是说,即使检验呈现阳性,病人得病的概率,也只是从0.1%增加到了2%左右。这就是所谓的"假阳性",即:即使检验阳性结果完全不足以说明病人得病。 为什么这种检验的准确率高达99%,但是可信度却不到2%?答案是与它的误报率太高有关。 如果误报率从5%降为1%,请问病人得病的概率会变成多少?,计算下来为0.099,仍然不高。 假设我们现在计算假阴性,即病人检验出来阴性,实际得病的概率。假设此时B为阴性。P(A|B)=P(A)*P(B|A)/P(B)=0.001*0.01/0.05=0.0002。
举例4:
一所学校里面有 60% 的男生,40% 的女生。男生总是穿长裤,女生则一半穿长裤一半穿裙子。 有了这些信息之后我们可以容易地计算“随机选取一个学生,他(她)穿长裤的概率和穿裙子的概率是多大”,这个就是前面说的“正向概率”的计算。 P(Pants)=0.6*1 0.4*0.5=0.8 然而,假设你走在校园中,迎面走来一个穿长裤的学生(很不幸的是你高度近似,你只看得见他(她)穿的是否长裤,而无法确定他(她)的性别),你是否能够推断出他(她)是女生的概率? P(Girl|Pants) = P(Girl) * P(Pants|Girl) / P(Pants) =0.4*0.5/0.8=0.25
3、贝叶斯决策理论:
就是在不完全情报下,对部分未知的状态用主观概率估计,然后用贝叶斯公式对发生概率进行修正,最后再利用期望值和修正概率做出最优决策。
贝叶斯决策理论方法是统计模型决策中的一个基本方法,其基本思想是:
- 已知类条件概率密度p(x | wi)参数表达式和先验概率p(wi)。
- 利用贝叶斯公式转换成后验概率。
- 根据后验概率大小进行决策分类。
其中,类条件概率密度:假定x是一个连续随机变量,其分布取决于类别状态,表示成p(x|ωi)的形式,这就是“类条件概率密度”函数,即在已知某类别的特征空间中,出现特征值X的概率密度,或解释成第ωi类样品其属性x是如何分布的,有时也称为状态条件概率密度。
举例:
假设有一个数据集,由两类数据组成,数据分布如下:其中紫色为类别1,绿色为类别2
用p1(x,y)表示数据点(x,y)属于类别I的概率,用p2(x,y)表示数据点(x,y)属于类别2的概率。那么对于一个新的数据点(x,y),可以用下面的规则来判断它的类别:
- 如果p1(x,y)>p2(x,y),那么类别1
- 如果p1(x,y)<p2(x,y),那么类别2
也就是说我们会选择高概率对应的类别,这就是贝叶斯决策李璐的核心思想,即选择最高概率决策。
4、贝叶斯常见应用案例
案例1:拼写纠错检查
当用户输入了一个不在字典中的单词,我们需要去猜测:“这个家伙到底真正想输入的单词是什么呢?”用形式化的语言来叙述,就是我们需要求得:
P(我们猜测他想输入的单词 | 他实际输入的单词)
比如用户输入thew,那么猜测他到底想输入the,还是thaw,还是其他的单词?到底哪一个单词的可能性比较大?这时候我们就可以用贝叶斯去求出每个词语的可能性。
不妨把我们的猜测记为h1、h2、...hn,他们都属于一个有限且离散的猜测空间H(单词总共就只有那么多,H代表hypothesis),将用户实际输入的单词记为D(D代表data,即观测数据),于是问题转为:
P(我们的猜测1 | 他实际输入的单词)可以表示为P(h1|D),依次对于猜测2,则表示为P(h2|D),我们需要计算这些概率值,取最大的。
把所有的猜测先统一记为P(H|D),运用一次贝叶斯公式,我们得到:P(H|D) = P(H) * P(D|H) / P(D)
因为不论对哪一个具体猜测h1、h2、...hn,其中的P(D)都是一样的,所以在计算或比较P(h1 | D) 和 P(h2 | D) 的时候我们可以忽略P(D)这个常数。把公式简化为:
P(H | D) ∝ P(H) * P(D | H),其中∝代表正比例于。
这个式子的抽象含义是:对于给定观测数据,猜测是好是坏,取决于“这个猜测本身独立的可能性大小(先验概率,Prior )”和“这个猜测生成我们观测到的数据的可能性大小”(似然,Likelihood )的乘积。
具体到上面的 thew 例子上,就是用户实际是想输入 the 的可能性大小取决于 the 本身在词汇表中被使用的可能性(频繁程度)大小(先验概率)和 想打 the 却打成 thew 的可能性大小(似然)的乘积。
解决问题的方法变为,对于各种猜测,计算下P(H) * P(D | H) 这个值,然后取值为最大的那个猜测即可。
来比较哪个模型最为靠谱,有两种思路:
- 最大似然:最符合观测数据的(即 P(D | H) 最大)最优优势
- 奥卡姆剃刀:先验概率p(H)较大的模型有较大的优势。
举一个极端的极大似然的案例:假设我们投掷硬币,只投了一次,观察到的是“正面”,根据最大似然估计的精神,我们应该猜测这枚硬币投掷出“正面”的概率为1,因为这个才是最大化的P(D | h) 的那个猜测。
而用奥卡姆剃刀的思想,则认为P(D | H) 大并不代表这个猜测就是更好,还需要你的p(H)足够大。所谓奥卡姆剃刀精神就是说:如果两个理论具有相似的解释力度,那么优先选择那个更简单的(往往也正是更平凡的,更少繁复的,更常见的)。
附:奥卡姆剃刀:
假设平面上 N 个点总是可以用 N-1 阶多项式来完全拟合,当 N 个点近似但不精确共线的时候,用 N-1 阶多项式来拟合能够精确通过每一个点,然而用直线来做拟合/线性回归的时候却会使得某些点不能位于直线上。到底哪个好呢,多项式还是直线?一般地说肯定是越低阶的多项式越靠谱(当然前提是也不能忽视“似然”P(D | h) ,明摆着一个多项式分布您愣是去拿直线拟合也是不靠谱的,这就是为什么要把它们两者乘起来考虑),原因之一就是低阶多项式更常见,先验概率( P(h) )较大(原因之二则隐藏在 P(D | h) 里面),这就是为什么我们要用样条来插值,而不是直接搞一个 N-1 阶多项式来通过任意 N 个点的原因。
案例2:拼写纠错检查
假设收到一个邮件,需要判断邮件是垃圾邮件还是正常邮件?
用P(D)来表示这封邮件。而邮件是由N多个单词组成的。用h 来表示垃圾邮件,用h-来表示正常邮件。则有如下公式:
P(h |D) = P(h ) * P(D|h ) / P(D)
P(h-|D) = P(h-) * P(D|h-) / P(D)
p(h )为是垃圾邮件的先验概率。比如在1000封邮件中,垃圾邮件为100篇,那p(h )=100/1000=0.1P(D|h )为当这封邮件是垃圾邮件时,含有的D邮件的这些词的概率,而D因为是确定的邮件,所以邮件中的词语也是确定的。只需要看垃圾邮件的词语的概率。
现在D里面含有N个单词d1、d2、d3...dn。
P(D|h )=P(d1,d2,...dn | h ),也即在垃圾邮件中出现跟我们这封邮件一模一样的概率是多大。这么求的话,太严格,概率就很小了,判断也很困难,可以做如下扩展:
P(d1,d2,...dn | h )转化为P(d1 | h )*P(d2 | h )*...P(dn | h ).
需要把这个原始的贝叶斯问题转化成朴素贝叶斯,即假设各个特征之间相互独立,且互相没有影响。
也即每个单词之间是没有关系的。这时,只需要求出每个di在垃圾邮件中出现的频率,即可得到P(h |D)。
但实际中di之间是有影响的,我们只需要把影响考虑降到最低,能解决问题即可
总结:
贝叶斯公式为利用搜集到的信息对原有判断进行修正提供了有效手段。在采样之前,经济主体对各种假设有一个判断(先验概率),关于先验概率的分布,通常可根据经济主体的经验判断确定(当无任何信息时,一般假设各先验概率相同),较复杂精确的可利用包括最大熵技术或边际分布密度以及相互信息原理等方法来确定先验概率分布。
,