1. 贝叶斯是什么?
所谓的贝叶斯方法源于他生前为解决一个“逆概”问题写的一篇文章,在贝叶斯写这篇文章之前,人们已经能够计算“正向概率”,如“假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率是多大”。而一个自然而然的问题是反过来:“如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测”。这个问题,就是所谓的逆概问题。
实际上,贝叶斯当时的论文只是对这个问题的一个直接的求解尝试,并不清楚他当时是不是已经意识到这里面包含着的深刻的思想。然而后来,贝叶斯方法席卷了概率论,并将应用延伸到各个问题领域,所有需要作出概率预测的地方都可以见到贝叶斯方法的影子,特别地,贝叶斯是机器学习的核心方法之一。这背后的深刻原因在于,人类的观察能力是有局限性的,我们日常所观察到的只是事物表面上的结果,我们需要用我们观察到的对我们未知的的进行推测,沿用刚才那个袋子里面取球的比方,我们往往只能知道从里面取出来的球是什么颜色,而并不能直接看到袋子里面实际的情况。这个时候,我们就需要进行一个猜测,我们需要做两件事情:1.
算出各种不同猜测的可能性大小。2. 算出最靠谱的猜测是什么。第一个就是计算特定猜测的后验概率,对于连续的猜测空间则是计算猜测的概率密度函数。第二个则是所谓的模型比较,模型比较如果不考虑先验概率的话就是最大似然方法。
2. 贝叶斯公式的由来
我们使用维基百科上的例子来推导:一所学校里面有 60% 的男生,40% 的女生。男生总是穿长裤,女生则一半穿长裤一半穿裙子。有了这些信息之后我们可以容易地计算“随机选取一个学生,他(她)穿长裤的概率和穿裙子的概率是多大”,这个就是前面说的“正向概率”的计算。然而,假设你走在校园中,迎面走来一个穿长裤的学生(很不幸的是你高度近似,你只看得见他(她)穿的是否长裤,而无法确定他(她)的性别),你能够推断出他(她)是男生的概率是多大吗?
假设学校里面的人总数是U个,用P(男)表示学校中男生的概率,用P(女)表示学校中女生的概率,用P(长裤|男)表示男生中穿长裤的概率,用P(长裤|女)表示女生中穿长裤的概率。那么穿长裤男生的人数为:U*P(男)*P(长裤|男);穿长裤女生的人数为:U*P(女)*P(长裤|女)。我们用P(男|长裤)表示穿长裤中男生的概率,那么P(男|长裤)=U*P(男)*P(长裤|男)/(U*P(男)*P(长裤|男)+U*P(女)*P(长裤|女)),通过化简,我们可以得到P(男|长裤)=P(男)*P(长裤|男)/(P(男)*P(长裤|男)+P(女)*P(长裤|女))=P(男,长裤)/P(裤)。
通过类推我们可以得到公式:P(A|B)=P(AB)/P(B),这就是概率论中的条件概率公式,我们可以进一步推出贝叶斯公式:
我们把P(A)称为"先验概率"(Prior probability),即在B事件发生之前,我们对A事件概率的一个判断。P(A|B)称为"后验概率"(Posterior probability),即在B事件发生之后,我们对A事件概率的重新评估。P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。这就是贝叶斯推断的含义。我们先预估一个"先验概率",然后加入实验结果。
在这里,如果"可能性函数"P(B|A)/P(B)>1,意味着"先验概率"被增强,事件A的发生的可能性变大;如果"可能性函数"=1,意味着B事件无助于判断事件A的可能性;如果"可能性函数"<1,意味着"先验概率"被削弱,事件A的可能性变小。
我们再来看一个用贝叶斯推理分析伊索寓言“孩子与狼”的例子。
伊索寓言“孩子与狼”讲的是一个小孩每天到山上放羊,山里有狼出没。第一天,他在山上喊:“狼来了!狼来了!”,山下的村民闻声便去打狼,可到山上发现狼没有来。第二天仍是如此。第三天狼真的来了,可无论小孩怎么喊叫,也没有人来救他,因为前二次他说了谎,人们不再相信他了。现在用贝叶斯推理来分析此寓言中村民对这个小孩的可信程度是如何下降的。
我们用E表示“小孩说谎 用H表示“小孩可信”。不妨设村民过去对这个小孩的印象为P(H)=0.8,则P('H)=0.2
我们现在用贝叶斯推理来推断P(H/E),也即这个小孩说了一次谎后,村民对他可信程度的改变。
在贝叶斯推断中我们要用到概率P(E/H)和P(E/'H),前者为可信的孩子说谎的可能性,后者为不可信的孩子说谎的可能性。在此不妨设P(E/H)=0.1,P(E/'H)=0.5
第一次村民上山打狼,发现狼没有来,即小孩说了谎。村民根据这个信息,对这个小孩的可信程度改变为P(H/E)=0.8×0.1/((0.8×0.1)+(0.2×0.5))=0.444这表明村民上了一次当后,对这个小孩的可信程度由原来的0.8下降到了0.444。
在此基础上,我们再一次用贝叶斯推理来推断P(H/E),也即这个小孩第二次说谎后,村民对他的可信程度改变为P(H/E)=0.444×0.1/((0.444×0.1)+(0.556×0.5))=0.138这表明村民们经过两次上当,对这个小孩的可信程度已经从0.8下降到了0.138,如此低的可信度,村民听到第三次呼叫时怎么再会上山打狼呢?
3. 贝叶斯用法实例——拼写纠错
经典著作《人工智能:现代方法》的作者之一 Peter Norvig 曾经写过一篇介绍如何写一个拼写检查/纠正器的文章(这篇文章很深入浅出,强烈建议读一读),里面用到的就是贝叶斯方法,这里我们不打算复述他写的文章,而是简要地将其核心思想介绍一下。
首先,问题是我们看到用户输入了一个不在字典中的单词,我们需要去猜测:“这个家伙到底真正想输入的单词是什么呢?”用刚才我们形式化的语言来叙述就是,我们需要求:
P(我们猜测他想输入的单词 | 他实际输入的单词)
我们最终的目的是找出那个使得这个概率最大的猜测单词。显然,我们的猜测未必是唯一的,比如用户输入: thew ,那么他到底是想输入 the ,还是想输入 thaw ?到底哪个猜测可能性更大呢?幸运的是我们可以用贝叶斯公式来直接出它们各自的概率,我们不妨将我们的多个猜测记为 h1 h2 .. ( h 代表 hypothesis),它们都属于一个有限且离散的猜测空间 H (单词总共就那么多而已),将用户实际输入的单词记为 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 h3 .. ,P(D) 都是一样的,所以在比较 P(h1 | D) 和 P(h2 | D) 的时候我们可以忽略这个常数。即我们只需要知道:
P(h | D) ∝ P(h) * P(D | h) (注:那个符号的意思是“正比例于”,不是无穷大,注意符号右端是有一个小缺口的。)
这个式子的抽象含义是:对于给定观测数据,一个猜测是好是坏,取决于“这个猜测本身独立的可能性大小(先验概率,Prior )”和“这个猜测生成我们观测到的数据的可能性大小”(似然,Likelihood )的乘积。具体到我们的那个 thew 例子上,含义就是,用户实际是想输入 the 的可能性大小取决于 the 本身在词汇表中被使用的可能性(频繁程度)大小(先验概率)和 想打 the 却打成 thew 的可能性大小(似然)的乘积。下面的事情就很简单了,对于我们猜测为可能的每个单词计算一下 P(h) * P(D |
h) 这个值,然后取最大的,得到的就是最靠谱的猜测。
4.朴素贝叶斯分类
对于分类问题,其实谁都不会陌生,每个人生活中无时不刻的在进行着分类。例如,走在大马路上看到女孩子,你会下意识的将她分为漂亮和不漂亮(漂亮当然就多看几眼啦)。在比如,在路上遇到一只狗,你会根据这只狗的毛发脏不脏,然后想到这是一只流浪狗还是家养的宠物狗。这些其实都是生活中的分类操作。
而贝叶斯分类是在生活中分类的基础上加以概率数学来规定定义的一种分类方式。
朴素贝叶斯分类是贝叶斯分类中的一种十分简单的分类算法,看到朴素两个字就知道这种贝叶斯分类肯定很乡村~,用通俗的话来讲就是:你在国外旅游,遇见一个说中文的黄种人,那么你肯定会想,老乡啊!中国人!为啥?因为在国外遇到讲中文的大概都是中国人吧,只有一部分人是华侨或者其他国籍的华人,因为是中国人的概率最高,所以我们会认为他就是中国人,这就是朴素贝叶斯的思想。
朴素贝叶斯的思想严格的定义是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。其中在求解某个待分类项出现的条件下,各个类别出现的概率时,一般是根据该待分类项的特征属性来求的。