初识贝叶斯

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识贝叶斯相关的知识,希望对你有一定的参考价值。

参考技术A 什么贝叶斯定理、贝叶斯方法、贝叶斯网络这种,外行人一听头就疼,这完全没有乘法分配律乘法结合律来的亲民啊!实际上,他确实不亲民(摊手)

那我们就从如何着手去处理贝叶斯网络为目标, 好好看,好好学 (这是文章基于的框架结构,在此基础上进行了补充说明)。

咱先整抓球,一个不透明的带子,里面有4个除了颜色完全相同的球:2红1绿1蓝。此时你去随手抓,那问你抓到各个颜色球的概率是多少?我想是个正常人都会说:那不50%、25%、25%?这是不论你取多少次,概率θ始终不变的事件,即不随观察结果X的变化而变化。

显然啊!那不然会是什么呢?

这种观点长期统治着人们,或者说,统治着正常人,这叫频率派观点。直到有个叫Thomas Bayes的人出来搅局。

贝叶斯不介绍了,生前民间学术“屌丝”,身后颠覆了概率史啊。这里说一下他最终发表的一篇多年后轰动世界的文章:An essay towards solving a problem in the doctrine of chances(机遇理论中一个问题的解)

回到上面这个问题,袋子里取红球的概率θ是多少?正常人都说50%,贝叶斯说“NO!”。他认为取的红球的概率是个不确定的值,因为其中含有机遇的成分。

是不是不好理解了?那我们换个例子来讲(这个抓球有什么机遇,我也不懂,但大佬都以这些开头,所以咱换个例子)

78泽干了两年程序员,现在想自己创业开个外包公司。这个结果无非“走向人生巅峰”和“欠一屁股债”,要么成功要么失败。现在我们大家来估计一下他成功的概率有多大?你们可能会说:“这谁啊,两年就创业,吓他个鬼,不可能的。成功几率最多5%。”而我对他的为人比较了解,他有想法,有方法,有思路,还有毅力,能吃苦,还有情调,有凝聚力,还为他人着想等,那我就估计他成功的概率有75%以上。

这种不同于最开始的“非黑即白、非0即1”的思考方式,就是贝叶斯式的思考方式。

【频率派】把需要推断的参数θ看作是固定的未知常数,即概率虽然是未知的,但最起码是确定的一个值,同时,样本X是随机的,即不管球几红几绿,事件的概率θ一定。所以频率派重点研究样本空间,大部分的概率计算都是针对样本X的分布;

【贝叶斯派】认为参数θ是随机变量,而样本X是固定的。由于样本X固定,所以他们重点研究的是参数θ的分布。

这样,贝叶斯派提出了一个思考问题的固定模式:

先验分布π(θ)+ 样本信息X ==> 后验分布π(θ|x)

这意味着,新观察到的样本信息将修正人们以前对事物的认知。换而言之,在得到新的样本信息前,人们对θ的认知是先验分布π(θ),在得到新的样本信息X后,人们对θ的认知受其影响变为π(θ|x)。

先验信息一般来源于经验和历史资料,比如在S7以前的SKT VS RNG,解说总会根据历年比赛结果进行一个胜负的预判来相应解说。但从S7,S8这两个赛季后,发现韩国队不行了!那么现在你再看SKT VS RNG,可就不一定了不是吗?那是不是就是X影响了π(θ)得到了π(θ|x)。

后验分布π(θ|x)一般也认为是在给定样本X的情况下的θ条件分布,而使π(θ|x)达到最大的值θMD,这个θMD称谓最大后验估计,类似于统计学的极大似然估计。

这里插曲一下,似然和概率,很多人其实都不明白这是啥区别。似然(likelihood)在非正式场合中和概率(probability)几乎相同。但在统计学中完全不同。概率是在特定环境下某件事发生的可能性,也就是结果没有产生之前依据环境所对应的参数来预测某件事情发生的可能性;而似然正好相反,是在确定的结果下去推测产生这个结果的可能环境(参数)。

结果和参数相互对应的时候,似然和概率在数值上是相等的。 了解更多似然,点击这里

当然除了上述思考模式,还有举世闻名的贝叶斯定理。

先回顾几个名词

条件概率(又称后验概率)就是事件A在另外一个事件B已经发生的条件下发生的概率P(A|B):

自己花几个圆圈就能推导出这个公式了。

联合概率表示两个事件共同发生的概率:

边缘概率(又称先验概率)是某个事件发生的概率。边缘概率是这样得到的:在联合概率中,把最终结果中那些不需要的事件通过合并成它们的全概率从而消去它们(对离散随机变量用求和得全概率,连续随机变量用积分得全概率),这称为边缘化(marginalization),比如A的边缘概率表示为P(A),B的边缘概率表示为P(B)。

现在考虑问题:P(A|B)是在B发生的情况下A发生的可能性。

(1)首先,B发生之前,对事件A发生的基本概率判断为A的先验概率P(A);

(2)其次,事件B发生后,我们对事件A发生概率重新评估,称为A的后验概率P(A|B);

(3)类似,事件A发生前,对B的先验概率P(B);

(4)事件A发生后,B后验概率P(B|A)。

贝叶斯定理如下:

推导证明如下:

上式两边同时除以P(B),若P(B)非零,变得到贝叶斯定理公式表达式。

上述为传统的贝叶斯公式写法,还有另一种写法,称之为贝叶斯推断。

对条件概率公式进行变形,得到如下形式:

P(A)称为先验概率,P(A|B)为后验概率,而P(B|A)/P(B)称之为可能性函数(likelyhood),这是一个调整因子,使得预估概率更接近真实概率。

贝叶斯推断的含义:我们先预估一个先验概率,然后加入实验结果,看这个实验到底是增强还是削弱了先验概率,由此得到更接近事实后验概率。

这里,可能性函数>1,意味着先验概率被增强,事件A的发生可能性变大;可能性函数=1,意味着B事件无助于判断事件A的可能性;可能性函数<1,意味着先验概率被削弱,事件A的可能性变小。

举例加深理解:

【1】水果糖问题

两个一模一样的碗,一号碗中有30颗水果糖和10颗巧克力,二号碗有水果糖和巧克力各20颗。现在随机选择一个碗,从中摸出一颗糖,发现时水果糖。请问这个水果糖来自一号碗的概率是多少?

解:我们假定,H1表示碗一,H2表示碗二,有条件已知P(H1)=P(H2),即在取出水果糖之前,这两个碗被选中的概率相同。因此P(H1)=0.5,此为先验概率。

再假定E表示水果糖,所以问题变为已知E的情况下,来自碗一的概率有多大:求P(H1|E)。我们把这个称为后验概率,即E事件发生后,对P(H1)的修正。

根据条件概率公式,得到

已知:P(H1)=0.5,P(E|H1)=0.75,那么求出P(E)就可以得到答案,根据全概率公式(推导根据条件概率公式推就行了)

得到:

将已知带入得P(E)=0.625,最后将结果带入原方程,得到P(H1|E)=0.6,也就是说取出水果糖后,H1事件的可能性得到了增强(P(E|H1)/P(E)=0.75/0.625=1.2>1)。

贝叶斯公式还有一个最经典也是目前最广泛的应用:拼音纠错,谷歌的拼音检查就是基于贝叶斯方法。

《人工智能:现代方法》作者之一Peter Norvig曾写一篇介绍如何写一个拼写检查的文章( 原文 ),使用的也是贝叶斯方法。

用户输入一个单词,可能拼写正确,也可能拼写错误。如果把拼写正确的情况记做c,错误记做w,那么拼写检查要做的事情就是:在发生w的情况下,试图推断出c,换而言之,就是已知w,然后在若干个备选方案中,找出可能性最大的那个c,即求P(c|w)的最大值。

由于对于所有备选的c来说,对应的都是同一个w,所以它们的P(w)相同,因此我们只需要最大化P(w|c)*P(c)。

其中P(c)表示某个正确的单词出现的“概率”,它可以用“频率”代替。如果我们有一个足够大的文本库,那么这个文本库中每个单词的出现频率,就相当于它的发生概率。某个词的出现频率越高,P(c)就越大。比如在你输入一个错误的单词“tes”的时候,系统更倾向于“tea”,而不是“tee”,因为tea更常见。

当然这其中要是深究,还有更多的可能性,比如说错误字母与正确字母在键盘上的位置,也许你是按错了所以会拼错,但实际上你要拼写的单词就是那个频率低的单词,是不是?在这里,初学,咱先放一放。

P(w|c)表示在试图拼写c的情况下,出现拼写错误w的概率。为了简化问题,假定两个单词在字形上越接近,就越有可能拼错,P(w|c)就越大。举例来说,相差一个字母的拼法,就比相差两个字母的拼法,发生概率越高。你想拼写“july”,错误拼成“julw”的可能性就比错拼成“jullw”高很多。一般把这种问题称为“编辑距离”。

贝叶斯网络(Bayesian Network),又称信念网络(Belief Network),或有向无环图模型,十一中概率图模型。它是一种模拟人类推理过程中因果关系的不确定性处理模型,其网络拓扑结构是一个有向无环图(DAG,direvted acyclic graphical)。

贝叶斯网路中节点表示随机变量,认为有因果关系(或非条件独立)的变量或命题则用剪头来连接。

例如,假设节点E直接影响到节点H,即E-->H,则用从E指向H的箭头建立节点E到节点H的有向弧(E,H),权值(即连接强度)用条件概率P(H|E)来表示。

简而言之,把某个研究系统中涉及的随机变量,根据是否条件独立绘制在一个有向图中,就形成了贝叶斯网络。其主要用来描述随机变量之间的条件依赖,用圈表示随机变量(random variables),用箭头表示条件依赖(conditional dependencies)。

关于随机变量,这里不同于普通公式中的x,z那种未知数,之前专门研究过,但是参考的网址找不到了。随手记了一些笔记,分享一下(字丑):

令G=(I,E)表示一个有向无环图(DAG),其中I代表图形中所有的节点的集合,而E代表有向连接线段的集合,且令X=(Xi),i∈I为其有向无环图中某一节点i所代表的随机变量,若节点X的联合概率可以表示成:

则称X为相对于一有向无环图G的贝叶斯网络,其中,pa(i)表示节点i的“因”,也可以理解为“父节点”。

给订如下图所示的一个贝叶斯网络:

由图可知:

(1)x1,x2,......,x7的联合分布为:

(2)x1和x2独立(head-to-head);

(3)x6和x7在x4给订的条件下独立(tail-to-tail)。

根据上图,(1)很好理解,(2、3)所述的条件独立是什么意思呢?其实2、3点是贝叶斯网络中3个结构的其中两种。为了说清楚这个问题,需要引入D-Separation(D-分离)这个概念。

D-Separation是一种用来判断变量是否条件独立的图形化方法。换而言之,对于一个DAG,D-Separation方法可以快速的判断出两个节点之间是否条件独立。

有:P(a,b,c)=P(a)* P(b)* P(c|a,b)成立,化简如下:

在c未知的条件下,a、b被阻断(blocked),是独立的,称之为head-to-head条件独立,对应本节图1的x1,x2独立。

考虑c未知和已经两种情况:

1、在c未知的时候,有:P(a,b,c)=P(c)P(a|c)P(b|c),此时,无法得出P(a,b)=P(a)P(b),即c未知时,a、b不独立;

2、在c已知的时候,有:P(a,b|c)=P(a,b,c)/ P(c),然后将P(a,b,c)=P(c)P(a|c)P(b|c)带入此式中,得到:P(a,c|c)=P(a,b,c)/ P(c)=P(c)P(a|c)P(b|c)/P(c)=P(a|c)P(b|c),即c已知时,a、b独立。

所以,在c给定的条件下,a、b被blocked,式独立的,称之为tail-to-tail条件独立,对应本节图1中“x6,x7在x4给定的条件下独立”。

分c未知和已知两种情况:

1、c未知时,有:P(a,b,c)=P(a)*P(c|a)*P(b|c),但无法推出P(a,b)=P(a)P(b),即c未知时,a、b不独立;

2、c已知时,有:P(a,b|c)=P(a,b,c)/ P(c),且根据P(a,c)=P(a)P(c|a)=P(c)P(a|c),可化简得到:

所以在给定c的条件下,a、b被blocked,是独立的,称之为head-to-tail条件独立。

head-to-tail其实就是一个链式网络,在xi给定的条件下,xi+1的分布和x1,x2,...,xi-1条件独立。这意味着什么?这说明xi+1的分布状态只和xi有关,和其他变量都无关!通俗一点说,当前状态只跟上一状态有关,跟上上次或上上上上上上上次状态都无关!这种顺次演变的随机过程,就叫做马尔科夫链(Markov chain)。有:

将上述节点推广到节点集,则:对于任意的节点集A,B,C,考察所有通过A中任意节点到B中任意节点的路径,若要求A,B条件独立,则需要所有的路径都被blocked,即满足下列两个前提之一:

A和B的“head-to-tail”和“tail-to-tail”路径都通过C;

A和B的“head-to-head”路径不通过C及C的子孙;

最后举例说明上述D-Separation的3种情况(即贝叶斯网络的3种结构形式):

Factor Graph是概率图的一种,概率图有多重,最常见的就是Bayesian Network和Markov Random Fields(马尔科夫随机场)。

在概率图中,求某个变量的边缘分布是最常见的问题。这个问题有很多种求解方法,其中之一就是可以把Bayesian Network和Markov Random Fields转换成Factor Graph,然后用sum-product算法求解。

以下图为例:

对于上图,在一个人已经呼吸困难(dyspnoea)的情况下,其抽烟(smoking)的概率是多少?

P(smoking | dyspnoea = yes)= ?

继续推算如下:(这里我就不自己码了,好多箭箭头有点麻烦的,还是用原图简单明了)

对上述推导过程作解释如下:

1.第二行:对联合概率关于b,x,c求和(在d=1的条件下),从而消去b,x,c,得到s和d=1的联合概率;

2.第三行:最开始,所有变量都在sigma(d=1,b,x,c)的后面,但由于P(s)跟“d=1,b,x,c”都没关系,可以提到式子的最前面。而且P(b|s)和x、c没关系,所以也可以把它提出来,放到sigma(b)后,从而式子的右边剩下sigma(x)和sigma(c)。

(ps:这块看能看明白,至于为什么sigma(x)和sigma(c)不能写在一起,我也,哈哈哈~等之后再来补空挡,这里先记着。)

上图中Variable elimination表示的是变量消除的意思。为此引入因子图的概念。

定义异常的晦涩难懂,你光看着名字你就摸不着头脑,所以咱先通俗来讲,所谓因子图就是对函数进行因式分解得到的一种概率图。一般内含两种节点:变量节点和函数节点。众所周知,一个全局函数通过因式分解能够分解为多个局部函数的乘积,这些局部函数和对应的变量关系就体现在因子图上。

举例说明,现有一全局函数,其因式分解方程为:

其中fA、fB、fC、fD、fE为各函数,表示变量之间的关系,可以是条件概率也可以是其他关系(如Markov Random Fields中的势函数)。

其因子图为:

在因子图中,所有的顶点不是变量节点就是函数节点,边线表示他们之间的函数关系。

提及马尔科夫随机场,就再补充一些概念:

我们知道,有向图模型,称之为贝叶斯网络。但有些情况下,强制对某些节点之间的边增加方向是不合适的。使用没有方向的无向边,形成了无向图模型(Undirected Graphical Model,UGM),又被称为马尔科夫随机场或者马尔科夫网络(MRF or Markov Network)。

回归本文主旨,首先我们举例说明如何把贝叶斯网络(和MRF),以及把马尔科夫链、隐马尔科夫模型转换成因子图,以上图为例,根据各个变量对应的关系,可得:

其对应的因子图为(以下两种皆可):

有上述例子总结出贝叶斯网络构造因子图的方法:

·贝叶斯网络中的一个因子对应因子图中的一个节点

·贝叶斯网络中的每一个变量在因子图上对应边或者半边

·节点g和边x相连当且仅当变量x出现在因子g中

我把绘图的思考过程写下来,你跟着画一遍就会明白:

1.找出已存在的先验概率,图中为P(u)和P(w),那么因子对应节点,所以先画出P(u)和P(w)的节点,就是两个框;然后因子P(u)中出现的变量是u,那么由P(u)节点引出一条边,这条边就是u,同理P(w)引出w边;

2.发现因子P(x|u,w)知,x是u和w下的条件概率,故做节点P(x|u,w),然后将边u和w与之相连,并有该节点引出x边;

3.有因子P(y|x)和P(z|x)发现基于条件x引出两个变量y和z,那么此时需要将X边拆分成两条边(我猜想这个可能就叫半边,没有专门去查),并分别接入到P(y|x)和P(z|x)节点,再由各自节点对应引出y边与z边,结束作图。

对马尔科夫链转换的因子图和隐马尔科夫模型转换而成的因子图,做法相同。这里等以后专门讲马尔科夫的时候再仔仔细细说。这里把图贴出来给大家了解一下(应该可以很快看明白):

到这,我们算把因子图讲透了,现在看看维基百科上是这样定义因子图的:将一个具有多变量的全局函数因子分解,得到几个局部函数的乘积,以此为基础得到的一个双向图叫做因子图。

怎么样,这样直接看定义,你懂吗?

我们已经学会如何画因子图了,下面来思考这样一个问题:如何由联合概率分布求边缘概率分布?

这里给出公式:

对Xk以外的其他变量的概率求和,最终剩下Xk的概率。这就是该定义的原理。你明白了吗?我有点迷糊反正,可能说成话好理解,但是这个公式未免也太模糊了点(f真的万能)。

其实可以这么理解:

如果有:

那么:

就是说把除了xk以外的所有随机变量的概率求出来,这个f就表示一个多项式,是关于f括号里面x的。然后概率上面有一横,表示的是不发生概率。

好吧,其实这块我也没太明白,先埋个坑,以后回来填。

现在假定我们要计算:

同时,f能被分解成如下因子图(看到这里你大概能明白一点我上面说的f是多项式是什么意思了):

我们都知道乘法分配律:a * b + a * c = a * (b + c),等号左边两乘一加,等号右边一加一乘,效率不用多说。现在我们就借助分配律的思想,把因子图给分配咯!

怎么看公因子很简单,例如X3是有f1(x1)和f2(x2)通过f3这个函数得来的(即因子图那节所述,P(x3|x1,x2)),而之后的f5需要x3做因子(条件),所以自然左边这个框就成了公因子。

因为变量的边缘概率等于所有与他相连的函数传递过来的消息的乘积,所以计算得到:

观察上述计算过程,可以发现类似于“消息传递”的观点,且总共有两个步骤:

1.对于f的分解图,根据左框(蓝色)、右框(红色)所包围的两个box外面的消息传递:

2.根据红蓝框为主的两个box内部的消息传递:

看上图消息传递的方向(箭头),根据

我们可以推导出:

这样就将一个概率分布写成了两个因子的乘积,而这两个因子可以继续分解或者通过已知条件得到。这种利用消息传递的观念计算概率的方法就是sum-product算法。基于因子图可以用该算法高效地求出各个变量的边远分布。

sum-product算法,又称belief propagation,有两种消息:

一种是变量(variable)到函数(function)的消息 如下图所示:

此时,

另一种是函数到变量的消息 如下图所示:

此时,

如果因子图是无环图,则一定可以准确地求出任意一个变量的边远分布;如果是有环图,则无法用该算法准确求出边远分布。解决方法有3个:

1、删除贝叶斯网络中的若干边,使其不含有无向环

2、重新构造没有环的贝叶斯网络

3、选择loopy belief propagation算法(sum-product的递归版算法),该算法选择环中某个消息,随机赋初值,然后用sum-product算法,迭代下去,因为环的存在所以一定会达到赋值的消息,然后更新该消息,继续迭代,直至没有消息改变为止。缺点是不能确保收敛。

最后,该算法有个类似的max-product算法,弄懂了sum的,max的几乎完全一样。另这两个算法也能够应用到隐马尔科夫模型(hidden Morkov models)上。至于马尔科夫系列,下个专题咱再见~

以上是关于初识贝叶斯的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯:朴素贝叶斯定义朴素贝叶斯公式分解朴素贝叶斯分类流程高斯型朴素贝叶斯多项式朴素贝叶斯伯努利型朴素贝叶斯朴素贝叶斯预测概率校准朴素贝叶斯优缺点

04 贝叶斯算法 - 贝叶斯网络

贝叶斯分类器(3)朴素贝叶斯分类器

贝叶斯分类器(1)贝叶斯决策论概述、贝叶斯和频率、概率和似然

数据挖掘十大经典算法之朴素贝叶斯

从贝叶斯方法谈到贝叶斯网络