本文主要是介绍贝叶斯概率公式浅解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近在雷达多目标跟踪技术,其中的一大堆概率论方面的知识让我万分头疼,所以稍微梳理一下这些知识。
先说一下蒙特卡洛法。在书上看到这是动目标跟踪的一种性能检测算法,考虑这样一个问题:投3个骰子,扔出8点的概率是多少?很简单是不是,但是其实算出来还是有一点点麻烦(记住,“懒惰”对于一个程序员来时说一个优秀的品质,“懒惰”的人会详尽办法使问题变得容易处理)。那么,我们可不可以让计算机帮我们计算呢?计算机的最大特点是:计算快,但是不擅推理。所以我们用一个和他很相配的办法来计算这个概率:试。具体来说就是,让计算机去投骰子,投100万次,看看其中有多少次是8点,然后我们就知道实际概率了——这便是蒙特卡洛法,再简单不过的方法了,这个方法没有复杂的公式,没有麻烦的步骤,只是一个简单的思想:通过仿真来模拟现实,再用简单的统计方法得到概率。(折中解释转自matlab论坛)
那么什么时候使用蒙特卡洛法呢?先考虑一个更一般的问题,什么情况下我们可以使用一个概率论的方法。比如说扔骰子,如果我只扔一次,这个结果当然不能表示实际概率,但是我扔1000次,10000次呢?我们是不是可以认为实验所得的概率就是实际概率呢?再引用一下上面链接里所写的:“一个有关概率论最最基础,也最有用的经验值:对于使用概率问题讨论的系统,其必然存在的误差将约为(根号下样本数量)分之一。这个经验公式是薛定谔提出的。”这只是一个经验公式,没有任何推理。我们必须大量的实验以得到精确的统计学结果。同样的,如果样本数减少,比如只有1000个样本,那么误差就是1/sqrt(1000) = 3%,也就是说如果1000次实验所到的概率为3%,那么实际的概率应该在0%-6%之间。显然,在折中概率下,我们只能对样本进行粗略的估计。所以,对于蒙特卡洛方法,只要我们可以对系统进行准确的建模,那么概率的准确度就却决于我们实验的次数了。但是,我们的时间时有限的,我们不可能在有限时间内做无限多次重复试验。回到问题,我们什么时候使用蒙特卡洛方法,那便是,某概率事件的产生方式已知,但是运用概率公式进行求解十分困难或者根本不可能(比如说高阶微积分)。但是,对于一个有基本编程技术的人来说,写一个方阵程序比实际推到这个公式所用的事件短很多,那么我们就应该使用蒙特卡洛法。
一句话,蒙特卡洛法是复杂概率的简单求解,(就好像前面介绍的任何优化算法,都是复杂评价函数的快速求极值办法一样)。
接下来,我们开始介绍贝叶斯方法。
无论是基于概率的模式识别,还是基于概率的决策问题,我们都是要找到概率最高的情况,把这种情况作为结果。对于模式识别,我们要找出模式最有可能的类型,对于决策问题,我们找出可能产生最好结果的方案,而找出概率的依据,就是我们现有的已知信息。
比如,对于一个识别问题,我们需要找出的就是最大概率p(是某一物体|观测到物体具有的特性X),这种方法被称为:最大后验假设,我们需要考虑的问题是,我们如何得到这一概率。显然,如果这个可以直接求得的话,任何识别问题就都解决了。既然不好直接得到,那么有没有办法来用其他概率表示这一概率呢?
这个方法就是:贝叶斯公式。
p(h|D) = p(D|h)*p(h)/p(D)
这里,要再说明一下什么是似然函数,统计学中,似然函数是统计模型‘参数的函数’,L(θ|x)=P(X=x|θ)。关于θ的似然函数在数值上等于给定参数X后θ的概率。概率描述了已知参数时的随机变量的输出结果;似然则用来描述已知随机变量输出结果时,未知参数的可能取值。例如,对于“一枚正反对称的硬币上抛十次”这种事件,我们可以问硬币落地时十次都是正面向上的“概率”是多少;而对于“一枚硬币上抛十次,落地都是正面向上”这种事件,我们则可以问,这枚硬币正反面对称的“似然”程度是多少。
贝叶斯公式提供了知道先验概率p(h)和似然度p(D|h)的情况下,来推导后验概率p(h|D)。利用贝叶斯公式,我们可以将最大后验假设重写为:
MAP = max(P(h|D)) = max(P(D|h)*P(h)/P(D)),其中p(D)为归一化常数,可以去掉,得到标准最大后验假设公式:
MAP = max( P(D|h) * P(h) )
特殊的,对于很多情况下,我们没有理由说明任何一种情况的先验概率更大,(比如数字识别系统,那么被识别对象h是0-9的概率是相同的)。那么,P(h)也变成了一个常数,这时,我们将p(h)去掉,便得到了名为“最大似然假设”的方法(记为ML):
ML = max( p(D|h) )
那么,我们应该如何求解呢?
p(D|h)的现实意义是,当我们已知对象状态为h,观测对象状态为D的概率,也就是说,我知道这是某一东西,那么这种东西现实出D这种现象的概率是多少呢?只要我们对这个物体有足够的认识,得到这个概率是很容易的,至少我们还可以用蒙特卡洛方法仿真一下是吧!另一方面,由于我们的MAP和ML是求最大值问题,一个更有效的方法是:只要我们设定的P'(D|h)满足与真实P(D|h)单调就可以了(并且,所有P(D|h)相加可以不为1)。这一特性使得我们可以用非常多、且非常简便的方法近似求得MAP或者ML。比如,对于一个事件h,我们知道应该有的标准观测值为d'。那么,我们完全可以简单的定义P(D|h)的值为1/(D-d')^2,即观测误差越大,则我观测到这个观测值的概率越低——这种做法在绝大多数情况下将非常简单而且效果出乎意料的好。
以上是我对网上其他人内容的总结,和一些理解。
这篇关于贝叶斯概率公式浅解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!