56星座屋
当前位置: 首页 星座百科

从头开始实现贝叶斯算法(如何真正的理解算法)

时间:2023-05-26 作者: 小编 阅读量: 4 栏目名: 星座百科

有多少人能将贝叶斯思想自然的用于解释生活中的各种现象呢?实际上,贝叶斯当时的论文只是对这个问题的一个直接的求解尝试,并不清楚他当时是不是已经意识到这里面包含着的深刻的思想。然而后来,贝叶斯方法席卷了概率论,并将应用延伸到各个问题领域,所有需要作出概率预测的地方都可以见到贝叶斯方法的影子,特别地,贝叶斯成为机器学习的核心方法之一。

文/傅一平

源/与数据同行

大学时学习了很多高深的课程,什么数学物理方法、小波函数等等,但现在脑海里估计已经一片空白,反正大概是一堆公式和解题方法吧,其实就是在当时,也根本没深究过这些数学公式的来龙去脉,更无法理解这些公式后面的光辉思想。

贝叶斯算法大名鼎鼎,但用过贝叶斯的估计没几个能从业务的角度去真正理解贝叶斯吧?有多少人能将贝叶斯思想自然的用于解释生活中的各种现象呢?在电梯里你能用几句话跟领导解释清楚吗?

当然直接拿着贝叶斯公式或者调用一个函数的确可以快速解决问题,但这种方法显然没法内化,逻辑上的推导才是算法精神和乐趣所在,对于一个建模的人来说,如果有时间,还是要尽量让一个算法长在自己心里,语言和工具总会不断被更新,你也许永远跟不上这个节奏,唯有里面的思想是持久的,也是一大把年纪后能留下的唯一的算法资产,特别是如果其还能指导你的生活,知道为什么总是很重要。

1、关于信念

你相信上帝吗?你相信中医吗?你相信全球变暖是人为造成的吗?你相信转基因食品安全吗?你相信大年初一去灵隐寺烧香能带来好运吗?信或不信,我们可以用一个量化数字来表示,比如说概率,大年初一去灵隐寺烧香能带来好运的可能性是90%,这是主观概率,就好比天气预报说明天下雨的概率90%一样。

真正的深信不疑或彻底不信都是很少的,一般情况下对一般有争议的问题我们都是抱着将信将疑的态度,信念值在0.01%到99.99%之间,而且,我们对大多数事物的信念值都在动态变化,比如有什么特别突兀的新东西出来,我们一开始可能是不信的,随着证据增多,慢慢增加信念,那么,我如何基于这些证据去计算新的信念值?

2、贝叶斯的困惑

所谓的贝叶斯方法源于他生前为解决一个“逆概”问题写的一篇文章,而这篇文章是在他死后才由他的一位朋友发表出来的。在贝叶斯写这篇文章之前,人们已经能够计算“正向概率”,如“假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率是多大?”

而一个自然而然的问题是反过来:“如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测,随着取出的球越来越多,我的推测是否也会变化?”

实际上,贝叶斯当时的论文只是对这个问题的一个直接的求解尝试,并不清楚他当时是不是已经意识到这里面包含着的深刻的思想。然而后来,贝叶斯方法席卷了概率论,并将应用延伸到各个问题领域,所有需要作出概率预测的地方都可以见到贝叶斯方法的影子,特别地,贝叶斯成为机器学习的核心方法之一。

3、从业务出发推导贝叶斯定理

如果我在决策时掌握所有的信息,我当然能计算一个客观的概率,比如在一个桶里有黑白色的球,如果我事先知道里面黑白球的比例,我自然知道我随机拿到一个白球的概率是多少,如果我事先知道去灵隐寺获得好运的可能性就是90%,我自然会在某次路过灵隐寺的时候进去烧香。

可是生活中绝大多数决策面临的信息是不全的,我们手里只有有限的几个证据,而贝叶斯定理的精神在于,人类的观察能力是有限的,既然无法得到全面的信息,我们就在证据有限(表面)的情况下,尽可能地做一个更好的判断,下面我们先祭出贝叶斯公式,然后尝试用灵隐寺烧香能否显灵的例子推导出它:

P(A/B)=P(B/A)/P(B)*P(A)

这里P(A)代表认为升职的概率,B代表一个与A相关的事件(实例),比如“我朋友去年去了灵隐寺烧香,结果他升职了”,P(A/B)代表在B发生的情况下,A发生的概率,其他类似。

P(A)代表了我的原始信念A,就是说我对于升职有一个初始的判断概率,比如15%。P(A/B)代表某个实际事件发生后,有了新的证据,我需要对于原始的信念A做个调整,你可以把A当成你对一般情况的理论预言,而B是一次实验结果,有了新的实验结果,你就调整自己的理论预言,这个新的预言就是P(A/B)。

那么P(A/B)这个新的预言如何计算呢?

首先,跟初始的P(A)有关系,假如P(A)一开始极小,则再多的事件发生你也不会改变初衷,我们的当前观点肯定受先前观点的影响。

其次,跟P(B/A)/P(B)也有关系,就是说如果在原始信念P(A)作用下发生某个特定事件(B)的可能性相对更高了,则我由于这个事件改变原始信念的可能性就越高,比如这里P(B)代表去灵隐寺的概率,P(B/A)就代表升职的人中去过灵隐寺的的概率,两者比值就表示信念由于事实改变的相对大小,注意好好理解这句话。

最后,我们就得到了能业务化解释的贝叶斯公式:P(A/B)=P(B/A)/P(B)*P(A),假如你真理解了,你就不会纠结搞混这个公式。

4、从技术出发推导贝叶斯定理

当然,如果纯粹去推导出这个公式,其实也是容易的,笔者这里简要示意下:

U代表全空间,A代表升职,B代表去灵隐寺,C代表交集,很容易推导:

P(A,B)=C/U

P(A/B)*P(B)=C/B*B/U=C/U

P(B/A)*P(A)=C/A*A/U=C/U

即P(A/B)=P(B/A)/P(B)*P(A)

5、生活的启示

请看以下第一张图,你认为大树后面是一个箱子,还是两个箱子,或是三个箱子,为什么? 如果你认为是一个箱子,请看第二张图,你到底凭什么判断是一个箱子?

很简单,你会说:要是真的有两个箱子那才怪了,怎么就那么巧这两个箱子刚刚好颜色相同,高度相同呢?

那么,如何证明?

我们可以很容易用贝叶斯来解释这个生活常识问题,假如A1代表认为是一个箱子,A2代表二个箱子,B代表观察到的事件,则其实求解P(A1/B)、P(A2/B)哪个概率最大?

P(A1/B)=P(B/A1)/P(B)*P(A1)

P(A2/B)=P(B/A2)/P(B)*P(A2)

显然P(B/A2)猜测后面是两个箱子使得我们的观测结果成为小概率的时候,我们才会说才怪呢?哪能这么巧呢?

6、中文分词问题

中文分词领域就用到了贝叶斯,分词问题的描述为:给定一个句子(字串),如:南京市长江大桥,如何对这个句子进行分词(词串)才是最靠谱的,例如:

1. 南京市/长江大桥

2. 南京市长/江大桥

这两个分词,到底哪个更靠谱呢?

我们用贝叶斯公式来形式化地描述这个问题,令 B 为句子,A 为词串(一种特定的分词假设),我们就是需要寻找使得 P(A|B) 最大的 A ,使用一次贝叶斯可得:

P(A分词/B句子)=P(B/A)/P(B)*P(A)

由于P(B)对于每个A都一样,P( B/A )近似为1,则P(A/B)主要由P(A)决定,也就是要寻找一种分词A使得这个句子B的概率最大化。

如何计算一个词串,A=W1,W2,W3,W4...的可能性呢?

我们知道,根据联合概率的公式展开:P(W1, W2, W3, W4 ..) = P(W1) * P(W2|W1) * P(W3|W2, W1) * P(W4|W1,W2,W3) * ...,然而不幸的是随着条件数目的增加(P(Wn|Wn-1,Wn-2,..,W1) 的条件有 n-1 个),数据稀疏问题也会越来越严重,即便语料库再大也无法统计出一个靠谱的 P(Wn|Wn-1,Wn-2,..,W1) 来。

为了缓解这个问题,科学家们一如既往地使用了“天真”假设:我们假设句子中一个词的出现概率只依赖于它前面的有限的 k 个词(1个词就是朴素贝叶斯),这个就是所谓的“有限地平线”假设。

虽然这个假设很傻很天真,但结果却表明它的结果往往是很好很强大的,现在式子变成了:P(W1) * P(W2|W1) * P(W3|W2) * P(W4|W3) ..。

对于我们上面提到的例子“南京市长江大桥”由于“南京市长”和“江大桥”在语料库中一起出现的频率为 0 ,这个整句的概率便会被判定为 0 ,从而使得“南京市/长江大桥”这一分词方式胜出。

其他应用案例比如:

垃圾邮件识别(过滤器):P(A(垃圾邮件)/B(N个单词组成的垃圾邮件));

统计机器翻译:P(A(翻译成的外文)/B(待翻译的句子));

语音识别:P(A(推测出发送的句子)/B(观测到的语音信号));

7、一个具体计算案例

一般人中艾滋病的携带者比例是0.01%,如果一个人检测血液呈阳性,其得艾滋的概率是多少?(如果是真艾滋,血液检测的准确性达到99.9%,如果是假艾滋,血液检测准确率是99.99%)。

P(A(得艾滋)/B(检测呈阳性))= P(B/A)/P(B)*P(A)=99.9%/(0.01%*99.9% 99.9%*0.01%)*0.01%=50%。

真没想到,在这么高的血液检测准确性条件下,一个检测血液呈阳性的人真得艾滋的概率也只有50%。

直观解释:随机找1万人做实验,根据分布,只有1人得艾滋,由于检测手段强,这个人会被检测出来,但剩下的9999人虽然没艾滋,但检测出艾滋的概率由于0.01%,还是有1人被错误检测,因此共有2人检测成阳性,得艾滋的概率为50%。

因此,如果一个事情很罕见,即先验概率很低,即使再多的可疑事实出现,也要注意可能误判,比如不要对抓特务报太大信心!

笔者学习贝叶斯也是东看看,西看看,看了忘,忘了看,这次把学习的综合写成一篇还算易懂的文章,算是了却一个心愿,对于任何一个公式一定要在业务上搞懂搞透,起码能自圆其说吧,贝叶斯算是好懂的,但很多算法不是这样,公式的推导就已经让人发疯,更别提搞懂来龙去脉甚至跟生活去接轨了,从历史上看,牛人一般也只愿意show 结果,而不愿意把思考过程写下来,比如费马定理的证明,这个非常遗憾。

好了,贝叶斯介绍完了,如果你真的看到这里,是否对于其思想有一个新的理解?作为传统企业的一个技术人员,其实对于算法的掌控深度是非常纠结的,因为即使理解透了也可能于工作无益,这并非是性价比很高的方式,工程上能搞定就可以了。

但笔者想的是,这是一种学习方式,也许不用那么功利,自己觉得值就去干吧,没有谁能说现在学哪个知识就一定将来有用,或者没用,未来是如此不确定,在这个大数据时代。

,
    推荐阅读
  • 看图猜成语比较难的(似曾相识的感觉)

    是不是完全想不起有什么成语可以描述那?都是器官,这是什么成语?小编表示我也是看答案才知道的这个很简单啦,谁都希望找一个这样的老婆仔细看看缺少什么哦,想起来么有?

  • 冬红果和海棠果树区别(冬红果和海棠果树区别介绍)

    冬红果和海棠果树区别品种不同冬红果是园艺品种,属于苹果属蔷薇科的落叶稀半常绿乔木或灌木。海棠果则是蔷薇科的乔木种类,属于红厚壳属。所以两者并不是同一种植物,通过品种划分,能够明显看出两者差别。冬红果的叶片是椭圆形至广椭圆形,虽然边缘也有锯齿,但是和海棠果树相比,锯齿形态为圆钝样式。而海棠果的果实味甘微酸,比较适合人类使用。

  • 景德镇市派出所地点及联系电话一览 景德镇派出所电话号码

    景德镇市新村派出所地址:景德镇市珠山区新村北路景德镇市昌河派出所地址:景德镇市昌江区朝阳路景德镇市新厂派出所地址:景德镇市昌江区朝阳路666号景德镇市车站派出所地址:景德镇市珠山区通站路景德镇市里村派出所地址:景德镇市珠山区新厂西路景德镇市西郊派出所地址:景德镇市昌江区奥园路景德镇市珠山派出所地址:景德镇市珠山区风景路26号景德镇市竟成派出所地址:景德镇市珠山区曙光路景德镇市昌江派出所地址:景德镇

  • 凯迪拉克xt5推2.0t车型百米刹车(搭载蜂鸟悬架四驱科技)

    凯迪拉克xt5推2.0t车型百米刹车近日,上汽通用凯迪拉克XT5新增车型宣布上市,新增车型为豪华型四驱(蜂鸟版),售价为38.27万。该车在豪华型基础上进行升级,搭载全新蜂鸟悬架和蜂鸟四驱系统,进一步提升通过性与舒适性。细节部分,新车外观内饰设计未作变化,依旧延续了现款车型的设计理念。最后:作为一款豪华SUV车型,凯迪拉克XT5出色的静谧性,以及不错的豪华感和行驶舒适性,已经在该级别车型中属于佼佼者。

  • 祝福友谊的十句话(祝福朋友友谊的唯美句子)

    祝福朋友友谊的唯美句子幸在我最美好的年华里,遇见了一个愿意陪我疯的你谢谢你一直陪伴在我身边,不离不弃祝愿我们友谊长青亲爱的朋友,友情,如蓝天下碧蓝的湖水,美丽安然;祝福,如夜空中的繁星点点,夺目耀眼祝福依然,愿不变的幸福,。

  • 学生人生格言励志座右铭(人生格言)

    必须有容忍的雅量,仁德才能宏大;必须有忍耐的毅力,凡事才会成功。不要紧的事情也应尽快处理,动作快则有效率。对于紧急的事情反倒是应该放缓步调,因为忙中必然露出自己的破绽。为官一日,要行一日好事。

  • 奇闻cp获官方肯定(奇闻cp齁甜日常更新)

    犹记得在《心动的信号2》里面的他们,杨凯雯乖巧可爱,赵琦君待人真诚,一开始的他们并没有很熟,随着一次又一次的接触,他们之间的关系才越发熟络起来。除此之外,两人一起去动物园的甜蜜约会,赵琦君去追独自外出买厨房用品的杨凯雯的画面,每一幕都很齁甜,也是他们爱情的见证。

  • 原神智识之冕有什么用(原神智识之冕作用是什么)

    以下内容大家不妨参考一二希望能帮到您!原神智识之冕有什么用当我们升级角色的天赋技能由9级提升至10级的时候就需要用到智识之冕,升级一次需求量在1-2个智识之冕之前不等。当前版本中大家角色的天赋技能等级都不是太高,短期内对于智识之冕需求并不是太多,我们可以先攒着之后肯定是要给主C用到的。在本次活动中智识之冕需要100熄星精粹才能进行兑换。每个角色的每个天赋升10级,都需要用到智识之冕。

  • 冬天喝的热饮简单(寒冷冬日热气腾腾的热饮摊位很诱人)

    下面更多详细答案一起来看看吧!冬天喝的热饮简单

  • 让牛肉变嫩的妙招(牛肉怎么做才嫩)

    下面希望有你要的答案,我们一起来看看吧!让牛肉变嫩的妙招牛肉要逆着肉的纹路切,即如果纹路是横的,则切的时候要选择与纹路垂直的方向。因为这样才能切断牛肉的纤维,入口易嚼,肉嫩。牛肉切好后,把切好的牛肉放在碗里,先腌制一下,这是让牛肉变嫩的关键。小苏打的加入是让牛肉变嫩的关键。放入半个鸡蛋清抓拌均匀,放入一小勺淀粉拌匀,牛肉就腌好了。