2019独角兽企业重金招聘Python工程师标准>>>
大数据时代下的贝叶斯公式 2016-04-24 数据观 每当有技术热点或新概念出来的时候,人群就会分成三种:炒作的、观望的和踏踏实实干活的。炒作的是不懂的,观望的是保守的,沉下来去研究那些浮萍下面的算法、引擎、框架和语言的人,才是最后吃到果子的人。云计算、大数据莫不如是。
随着搜索、社交网络、电子商务和移动互联网的发展,数据总量和增长速度已经到了常人无法想象的地步。其中数学相关的知识是大数据应用和发展的原动力。
举个例子,比如贝叶斯定理。
搞数理统计如果不知道贝叶斯定理,那么你的人生肯定是不完整的。贝叶斯定理是贝叶斯推断的应用,是英国数学家托马斯·贝叶斯在1763年首次提出的。与其他统计学不同,贝叶斯定理是建立在主观判断的基础上,它需要有大量的样本数据,并在数据的基础上进行计算,数据量越大,计算结果越能反映现实世界。
在计算机诞生之前,这个前提条件是很难满足的,所以贝叶斯定理在历史上很长一段时间内都没有得到很好的应用。然后,互联网时代来临了……
现在贝叶斯定理广泛应用于中文分词、垃圾邮件处理、机器学习、图像识别、拼写检查和一些常用的分类算法上。可以说,我们现在最常用的互联网服务上,贝叶斯定理无处不在。贝老爷子没能挺到今天看到他提出的理论在互联网时代大放异彩,也算是憾事。其实做基础研究和艺术创作的人都非常不容易,每天徜徉在知识的小黑屋里冥思苦想,时时刻刻准备改变世界,结果很多学术成果和艺术成就都是自己挂了之后才流芳百世的,这种事随便想想也会让人感到悲伤。
当然,这些伟大的创造者和先知先觉的神人大都是以认知世界和发现规律为己任,他们注定是要去拯救和影响一代又一代的后人,所以早已超凡脱俗长袖飘飘,肯定不会有我等这些俗人俗想。
关于贝叶斯定理,刘未鹏和阮一峰的博客上都做过详细的介绍,大家可以去深入学习。我这里做个最简介绍,希望能够帮助大家入门。
贝叶斯定理主要是用来描述两个条件概率之间的关系,先介绍下条件概率。
P(A):表示事件A发生的概率。
P(B):表示事件B发生的概率。
P(A∩B):表示事件A和事件B同时发生的概率,也叫联合概率。
而条件概率的意思就是:事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。同理,P(B|A)就是事件A发生的情况下,事件B发生的概率。
用文氏图可以很容易地推导出贝叶斯公式,如图所示:
当事件B发生的情况下,事件A发生的概率就是P(A∩B)除以P(B),也就是: P(A|B) = P(A∩B)/P(B)
即:P(A∩B) = P(A|B)P(B)
同理可得:P(A∩B) = P(B|A)P(A)
换算一下就得到了贝叶斯公式:
P(A|B)P(B) = P(B|A)P(A)
也就是:
P(A|B) = P(B|A)P(A)/P(B)
用人话说出来就是:事件B发生的情况下事件A发生的概率等于事件A发生的情况下事件B发生的概率乘以事件A发生的概率,然后再除以事件B发生的概率。
我承认这句话更像是绕口令而不是人话,反正你们懂的,如果不懂竟然能看到这里,那么你赢了。
下面我们举个例子看看这个公式怎么用。有A、B两个一模一样的箱子,每个箱子里都放了很多黑球和白球。A箱子里有6个黑球,4个白球;B箱子里有1个黑球,9个白球。现在随机选择一个箱子拿出一个球,发现是黑球,请问这个球来自A箱子的概率是多少?
解题思路如下。
我们把"从A箱子拿出球"的事件设置为A事件,"拿出的球是黑球"设置为B事件。由于两个箱子是一模一样的,那么"从A箱子拿出球"的概率是二分之一,即:
P(A) = 0.5
"拿出是黑球"的概率也很容易算出来,把所有的黑球加起来除以球的总数,即:
P(B) = (6+1)/20 = 0.35
"从A箱中拿出黑球"的概率就更容易了,用A箱中的黑球数除以A箱中球的总数,即:
P(B|A) = 6/(4+6) = 0.6
那么根据公式,这个黑球来自A箱的概率就是:
P(A|B) = 0.6×0.5/0.35≈0.857
生活中,我们也常常会被类似的概率问题困扰,比如医患关系中常见的误诊问题,这些都是可以通过贝叶斯公式进行概率演算的,网络上有很多相关案例,有兴趣的可以去阅读学习(搜索"贝叶斯实例"即可)。
《黑客与画家》的第8章"防止垃圾邮件的一种方法",就采用了贝叶斯原理实现垃圾邮件过滤器,其中有详细的描述和实现思路,有这本书的读者可以去看看。
另外,如果你想从事大数据领域相关的工作,R语言也是值得关注的一门语言,关于这门语言,我还没入门。
大数据背后的神秘公式:贝叶斯公式
大数据、人工智能、海难搜救、生物医学、邮件过滤,这些看起来彼此不相关的领域之间有什么联系?答案是,它们都会用到同一个数学公式——贝叶斯公式。
大数据、人工智能、海难搜救、生物医学、邮件过滤,这些看起来彼此不相关的领域之间有什么联系?答案是,它们都会用到同一个数学公式——贝叶斯公式。它虽然看起来很简单、很不起眼,但却有着深刻的内涵。那么贝叶斯公式是如何从默默无闻到现在广泛应用、无所不能的呢?
18世纪英国业余数学家托马斯·贝叶斯(Thomas Bayes,1702~1761)提出过一种看上去似乎显而易见的观点:“用客观的新信息更新我们最初关于某个事物的信念后,我们就会得到一个新的、改进了的信念。” 这个研究成果,因为简单而显得平淡无奇,直到他死后的两年才于1763年由他的朋友理查德·普莱斯帮助发表。它的数学原理很容易理解,简单说就是,如果你看到一个人总是做一些好事,则会推断那个人多半会是一个好人。这就是说,当你不能准确知悉一个事物的本质时,你可以依靠与事物特定本质相关的事件出现的多少去判断其本质属性的概率。用数学语言表达就是:支持某项属性的事件发生得愈多,则该属性成立的可能性就愈大。与其他统计学方法不同,贝叶斯方法建立在主观判断的基础上,你可以先估计一个值,然后根据客观事实不断修正。
1774年,法国数学家皮埃尔-西蒙·拉普拉斯(Pierre-Simon Laplace,1749-1827)独立地再次发现了贝叶斯公式。拉普拉斯关心的问题是:当存在着大量数据,但数据又可能有各种各样的错误和遗漏的时候,我们如何才能从中找到真实的规律。拉普拉斯研究了男孩和女孩的生育比例。有人观察到,似乎男孩的出生数量比女孩更高。这一假说到底成立不成立呢?拉普拉斯不断地搜集新增的出生记录,并用之推断原有的概率是否准确。每一个新的记录都减少了不确定性的范围。拉普拉斯给出了我们现在所用的贝叶斯公式的表达:
P(A/B)=P(B/A)*P(A)/P(B),
该公式表示在B事件发生的条件下A事件发生的条件概率,等于A事件发生条件下B事件发生的条件概率乘以A事件的概率,再除以B事件发生的概率。公式中,P(A)也叫做先验概率,P(A/B)叫做后验概率。严格地讲,贝叶斯公式至少应被称为“贝叶斯-拉普拉斯公式”。
贝叶斯公式现在已经非常流行,甚至在热门美剧《生活大爆炸》中谢耳朵也秀了一下。但它真正得到重视和广泛应用却是最近二三十年的事,其间被埋没了200多年。这是为什么呢?原因在于我们有另外一种数学工具——经典统计学,或者叫频率主义统计学(我们在学校学的主要是这种统计学),它在200多年的时间里一直表现不错。从理论上讲,它可以揭示一切现象产生的原因,既不需要构建模型,也不需要默认条件,只要进行足够多次的测量,隐藏在数据背后的原因就会自动揭开面纱。
在经典统计学看来,科学是关于客观事实的研究,我们只要反复观察一个可重复的现象,直到积累了足够多的数据,就能从中推断出有意义的规律。而贝叶斯方法却要求科学家像算命先生一样,从主观猜测出发,这显然不符合科学精神。就连拉普拉斯后来也放弃了贝叶斯方法这一思路,转向经典统计学。因为他发现,如果数据量足够大,人们完全可以通过直接研究这些样本来推断总体的规律。
打个比方来帮助我们理解这两种统计学方法的区别。假如我们想知道某个区域里海拔最低的地方,经典统计学的方法是首先进行观测,取得区域内不同地方的海拔数据,然后从中找出最低点。这个数据量必须足够多,以反映区域内地形全貌的特征,这样我们才能相信找到的就是实际上的最低点。而贝叶斯方法是我不管哪里最低,就凭感觉在区域内随便选个地方开始走,每一步都往下走,虽然中间可能有一些曲折,但相信这样走早晚能够到达最低点。可以看出,贝叶斯方法的关键问题是这个最终到达的低点可能不是真正的最低点,而是某个相对低点,它可能对该区域的地形(碗型、马鞍形等)和最初我们主观选择的出发点有依赖性。如果问题域是碗型的,我们到达的就是最低点;但如果是马鞍形或者其他复杂曲面,那么我们到达的可能是多个相对低点(极点)中的一个,而不是真正的最低点。这是贝叶斯方法最受经典统计学方法诟病的原因,也是它在过去的200多年被雪藏的原因所在。
长期以来,贝叶斯方法虽然没有得到主流学界的认可,但其实我们经常会不自觉地应用它来进行决策,而且还非常有效。比如炮兵在射击时会使用贝叶斯方法进行瞄准。炮弹与子弹不同,它的飞行轨迹是抛物线,瞄准的难度更大,因此他们会先根据计算和经验把炮管调整到一个可能命中的瞄准角度(先验概率),然后再根据炮弹的实际落点进行调整(后验概率),这样在经过2-3次射击和调整后炮弹就能够命中目标了。
在日常生活中,我们也常使用贝叶斯方法进行决策。比如在一个陌生的地方找餐馆吃饭,因为之前不了解哪家餐馆好,似乎只能随机选择,但实际上并非如此,我们会根据贝叶斯方法,利用以往积累的经验来提供判断的线索。经验告诉我们,通常那些坐满了客人的餐馆的食物要更美味些,而那些客人寥寥的餐馆,食物可能不怎么样而且可能会被宰。这样,我们就往往通过观察餐厅的上座率来选择餐馆就餐。这就是我们根据先验知识进行的主观判断。在吃过以后我们对这个餐馆有了更多实际的了解,以后再选择时就更加容易了。所以说,在我们认识事物不全面的情况下,贝叶斯方法是一种很好的利用经验帮助作出更合理判断的方法。
而两个标志性的事件在让学术界开始重视贝叶斯方法上起到了重要作用。
1787年5月,美国各州(当时为13个)代表在费城召开制宪会议;1787年9月,美国的宪法草案被分发到各州进行讨论。一批反对派以“反联邦主义者”为笔名,发表了大量文章对该草案提出批评。宪法起草人之一亚历山大·汉密尔顿着急了,他找到曾任外交国务秘书(即后来的国务卿)的约翰·杰伊,以及纽约市国会议员麦迪逊,一同以普布利乌斯(Publius)的笔名发表文章,向公众解释为什么美国需要一部宪法。他们走笔如飞,通常在一周之内就会发表3-4篇新的评论。1788年,他们所写的85篇文章结集出版,这就是美国历史上著名的《联邦党人文集》。
《联邦党人文集》出版的时候,汉密尔顿坚持匿名发表,于是,这些文章到底出自谁人之手,成了一桩公案。1810年,汉密尔顿接受了一个政敌的决斗挑战,但出于基督徒的宗教信仰,他决意不向对方开枪。在决斗之前数日,汉密尔顿自知时日不多,他列出了一份《联邦党人文集》的作者名单。1818年,麦迪逊又提出了另一份作者名单。这两份名单并不一致。在85篇文章中,有73篇文章的作者身份较为明确,其余12篇存在争议。
1955年,哈佛大学统计学教授Fredrick Mosteller找到芝加哥大学的年轻统计学家David Wallance,建议他跟自己一起做一个小课题,他想用统计学的方法,鉴定出《联邦党人文集》的作者身份。
但这根本就不是一个小课题。汉密尔顿和麦迪逊都是文章高手,他们的文风非常接近。从已经确定作者身份的那部分文本来看,汉密尔顿写了9.4万字,麦迪逊写了11.4万字。汉密尔顿每个句子的平均长度是34.55字,而麦迪逊是34.59字。就写作风格而论,汉密尔顿和麦迪逊简直就是一对双胞胎。汉密尔顿和麦迪逊写这些文章,用了大约一年的时间,而Mosteller和Wallance甄别出作者的身份花了10多年的时间。
如何分辨两人写作风格的细微差别,并据此判断每篇文章的作者就是问题的关键。他们所采用的方法就是以贝叶斯公式为核心的包含两个类别的分类算法。先挑选一些能够反映作者写作风格的词汇,在已经确定了作者的文本中,对这些特征词汇的出现频率进行统计,然后再统计这些词汇在那些不确定作者的文本中的出现频率,从而根据词频的差别推断其作者归属。这其实和我们现在使用的垃圾邮件过滤器的原理是一样的。
他们是在没有计算机帮助的条件下用手工处理“大数据”,这一工程的耗时耗力是可想而知的。将近100个哈佛大学的学生帮助他们处理数据。学生们用最原始的方式,用打字机把《联邦党人文集》的文本打出来,然后把每个单词剪下来,按照字母表的顺序,把这些单词分门别类地汇集在一起。有个学生干得累了,伸了个懒腰,长长地呼了一口气。他这一口气用力太猛,一下子把刚刚归置好的单词条吹得如柳絮纷飞,一屋子学生瞬间石化,估计很多人连灭了他的心都有。而这只是手工大数据时代的日常。
Mosteller和Wallance这是要在干草垛里找绣花针。他们首先剔除掉用不上的词汇。比如,《联邦党人文集》里经常谈到“战争”、“立法权”、“行政权”等,这些词汇是因主题而出现,并不反映不同作者的写作风格。
只有像“in”,“an”,“of”,“upon”这些介词、连词等才能显示出作者风格的微妙差异。一位历史学家好心地告诉他们,有一篇1916年的论文提到,汉密尔顿总是用“while”,而麦迪逊则总是用“whilst”。
但仅仅有这一个线索是不够的。“while”和“whilst”在这12篇作者身份待定的文章里出现的次数不够多。况且,汉密尔顿和麦迪逊有时候会合写一篇文章,也保不齐他们会互相改文章,要是汉密尔顿把麦迪逊的“whilst”都改成了“while”呢?
当学生们把每个单词的小纸条归类、粘好之后,他们发现,汉密尔顿的文章里平均每一页纸会出现两次“upon”,而麦迪逊几乎一次也不用。汉密尔顿更喜欢用“enough”,麦迪逊则很少用。其它一些有用的词汇包括:“there”、“on”等等。1964年,Mosteller和Wallance发表了他们的研究成果。他们的结论是,这12篇文章的作者很可能都是麦迪逊。他们最拿不准的是第55篇,麦迪逊是作者的概率是240:1。
这个研究引起了极大的轰动,但最受震撼的不是宪法研究者,而是统计学家。Mosteller和Wallance的研究,把贝叶斯公式这个被统计学界禁锢了200年的幽灵从瓶子中释放了出来。
参考文献 [1] 《新发现》杂志2013年2月:解密世界的方程式 [2] 吴军:《数学之美》 [3] 何帆:《先放一把火》 [4] 科学松鼠会:死理性派是怎么判断漂亮女孩是不是单身的? [5] 统计之都创作小组:失联搜救中的统计数据分析