贝塔分布例子(转)

古语有云,“学好数理化,走遍天下都不怕。”

人工智能时代尤其如此。

比如,写上几句基础的数学概念,天上就能掉下一个工作来……这是真事。

学概率的时候,我们会反复来理解什么是正态分布,什么是均匀分布,什么是二项分布,什么是贝塔分布……不知在座的各位是否还能记起当时做过的习题?是否还能通俗地讲解一下这些概念?

在Stack Overflow,有位学机器学习的同学理解不了贝塔分布,希望有人能帮他解答下。刚好,正在学生物信息学博士的David Robinson现身说法,用一个有关棒球运动的统计数据来解释这个概念。这位博士纯粹是为了消磨时间,觉得好玩。

不过,Stack Overflow数据科学团队的Jason Punyon读完David Robinson的解答后,觉得解释很赞,他在内部会议上突发奇想:

哇!咱们干脆雇了这哥们儿吧。”

于是,一份公开的邀请不期而至:我们十分期待你能拜访一下Stack Overflow。

在好奇心的驱使下,原本打算博士毕业后研究计算生物学的David Robinson,鬼使神差地拜访了这家科技公司。一次拜访、几周面试,Stack Overflow提供给他一个无法拒绝的工作机会,David Robinson从计算生物学博士变成了一个数据科学家。

你一定特别好奇,这到底是个怎样的问题,直接就让这位博士拿到了数据科学家的offer?David Robinson的解释到底又有多精彩?现在我们让来看看这个问题。

首先声明,我并不是统计学家,只是一名软件工程师。我所掌握的大部分统计学知识都来自于自学,因此对于一些别人觉得很简单的概念,我可能会觉得很难理解。因此我希望答案能尽量通俗易懂,少一些专业名词而多一些形象解释。

我之前试图想弄清楚贝塔分布(beta distribution)的本质——它能用于做什么以及如何解释它的应用场景?

例如,当我们谈正态分布时,可以将它描述成火车的到达时间:大多数情况下火车正点到站,有时候会早1分钟或者迟1分钟,但是早20分钟或者迟20分钟的情况则非常罕见;均匀分布可以描述为彩票中奖的机会事件;二项分布可以描述成抛硬币事件等等。那么,贝塔分布有这样的直观解释吗?

例如 α=.99,β=.5,贝塔分布B(α,β)如下图所示(使用R生成):

那么这个图代表什么意思?Y轴是一个概率密度,那么X轴呢?

答案可以基于这个例子来解释,或者任何其他的也行。我将感激不尽。

David Robinson 解释如下:

简而言之,贝塔分布可以看作是一个概率的分布,也就是说,当我们不知道一个东西的具体概率是多少时,它给出了所有概率出现的可能性大小。下面结合一个应用场景来理解:

熟悉棒球运动的都知道一个指标就是棒球击球率(batting average-http://en.wikipedia.org/wiki/Batting_average%22),就是用一个运动员击中的球数除以总的击球数(因此它是一个0到1之间的百分比)。我们一般认为0.266是一个平均的击球水平,而如果击球率达到0.3就会被认为非常优秀了。

假设有一个棒球运动员,现在我们想预测他整个赛季的棒球击球率如何。你可能就会直接计算他目前的棒球击球率,用击中数除以击球数,但这在赛季开始阶段时是很不合理的!假如这个运动员就打了一次,还中了,那么他的击球率就是100%,如果他没中,那么就是0%。甚至打5、6次的时候,也可能运气爆棚全中击球率100%,或者运气很糟击球率0%。无论如何,基于这些来做预测是不合理的。

那么,为什么用前几次击中来预测整个赛季击球率不合理呢?当运动员首次击球没中时,为什么没人认为他整个赛季都会一次不中?因为我们有先验期望。根据历史信息,我们知道击球率一般会在0.215到0.36之间。如果一个运动员一开始打了几次没中,那么我们知道他可能最终成绩会比平均稍微差一点,但是一般不可能会偏离上述区间。

对于这个击球率问题,我们可以用二项分布(https://en.wikipedia.org/wiki/Binomial_distribution)表示(一系列的成功或失败事件),一个最好的方法来表示这些先验期望(统计中称为先验(prior))就是贝塔分布,这表示在运动员打球之前,我们就对他的击球率有了一个大概范围的预测。贝塔分布的定义域为(0, 1),与概率是一样的。我们下面继续解释为什么贝塔分布用在这个任务上是合理的。

假设我们预计运动员整个赛季的击球率大概是0.27左右,范围大概是在0.21到0.35之间。那么用贝塔分布来表示,我们可以取参数 α==81,β==219。

curve(dbeta(x, 81, 219))

之所以取这两个参数,原因如下:

  • 贝塔分布的均值

  • 从上图中可以看出,这个分布主要落在(0.2, 0.35)之间,这是从经验得到的合理范围。

你问在贝塔分布的密度图上x轴代表什么,在这里,x轴代表运动员的击球率。注意到在这个例子里,不仅y轴是代表概率(确切说是概率密度),x轴也是(击球率是击中次数的概率分布)。因此贝塔分布可以看作一个概率的分布。

接下来解释为什么贝塔分布适合这个例子。假设运动员一次击中,那么现在他本赛季的记录是“1次打中;1次打击”。那么我们更新我们的概率分布,让概率曲线做一些移动来反应我们的新信息。这里涉及一些数学上的证明(点此查看-https://en.wikipedia.org/wiki/Conjugate_prior#Example),但是结论非常简单。新的贝塔分布为:

其中 α0和β0是初始参数,在这里是81和219。所以,在这个例子里,增加了1(击中了一次),没有增加(没有失误)。因此新的贝塔分布为Beta(81+1,219),如下图:

curve(dbeta(x, 82, 219))

可以看到这个分布与原来相比并没有什么肉眼可见的变化,这是因为仅一次击中球并不能太说明什么问题。

然而,随着整个赛季运动员逐渐进行比赛,这个曲线也会逐渐移动以匹配最新的数据。由于我们拥有了更多的数据,因此曲线(击球率范围)会逐渐变窄。假设赛季过半时,运动员一共打了300次,其中击中100次。那么新的贝塔分布是Beta(81+100,219+200),如下图:

curve(dbeta(x, 81+100, 219+200))

可以看出,曲线现在更尖而且往右移动了(击球率更高),由此我们对于运动员的击球率有了更好的了解。

根据新的贝塔分布,我们得到的期望值通常也是我们的新的估计。贝塔分布的期望值计算公式是。因此新的贝塔分布的期望值为,注意到这个值比直接预估要低,但是比赛季开始时的预计要高

你可能已经注意到了,这个公式就相当于给运动员的击中次数添加了“初始值”,相当于在赛季开始前,运动员已经有81次击中219次不中的记录。

因此,在我们事先不知道概率是什么但又有一些合理的猜测时,贝塔分布能够很好地表示为一个概率的分布。

就这样,靠着一道数学题,就拿到了数据科学家的职位。做机器学习,你的数学准备好吗?

转自:https://mp.weixin.qq.com/s/ZEoxYPgenFgzHuNnI2IieQ

时间: 2024-08-06 11:58:18

贝塔分布例子(转)的相关文章

常用的概率分布:二项式分布,贝塔分布,狄里克雷分布

知识点:伯努利分布.二项式分布.多项式分布.先验概率,后验概率,共轭分布.贝塔分布.贝塔-二项分布.负二项分布.狄里克雷分布,伽马函数.分布 一,伯努利分布(bernouli distribution) 又叫做0-1分布,指一次随机试验,结果只有两种.也就是一个随机变量的取值只有0和1.记为: 0-1分布 或B(1,p),其中 p 表示一次伯努利实验中结果为正或为1的概率. 概率计算: P(X=0)=p0P(X=1)=p1 期望计算: E(X)=0?p0+1?p1=p 最简单的例子就是,抛一次硬

Android小例子:使用反射机制来读取图片制作一个图片浏览器

效果图: 工程文件夹: 该例子可供于新手参考练习,如果有哪里不对的地方,望指正>-< <黑幕下的人> java代码(MainActivity.java): package com.example.imageswitchtest; import java.lang.reflect.Field; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.v

JSON 简单例子

代码: json [ { "title" : "a", "num" : 1 }, { "title" : "b", "num" : 1 }, { "title" : "c", "num" : 1 }] 例子1 js var box=[ { title:'a', num:1, height:177, }, { title:'b',

最简单的基于FFmpeg的AVDevice例子(读取摄像头)【转】

转自:http://blog.csdn.net/leixiaohua1020/article/details/39702113 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] libavdevice使用 注意事项 代码 结果 下载 =====================================================最简单的基于FFmpeg的AVDevice例子文章列表: 最简单的基于FFmpeg的AVDevice例子(读取摄像头) 最简单的基于FFm

Clustering by Passing Messages Between Data Points(Brendan J.Frey* and Delbert Dueck)例子

例1,数据点聚类:AP应用到25个二维数据中,使用负平法误差作为相似度  聚类数目不用预先指定 AP的一个优点是聚类数目不用预先指定,而是在消息传递方法中慢慢浮现,取决于输入参考度(preference),这种自动模型的选择,基于先验指定每一个数据点有多合适作为exemplar. 下图表示输入常量参考度对聚类数目的影响,这种关系近乎同样于在精确最小平方误差中的关系. 例2,人脸识别:使用优化标准为均方差,识别900张灰度图像   AP一致的能够实现更低的误差,在时间上花费要少于两个数量级. AP

Python之路42-socket介绍及简单例子

socket对数据的底层收.发做了封装 实现通信要通过IP+port 一个socket服务端和客户端实现的伪代码 # 发送端 # import socket # socket.TCP/IP # connect(a.ip,a.port) # socket.send("hello") # socket.recv() # socket.close() # 接收端 # import socket # socket.TCP/IP # listen(0.0.0.0,6969) # waiting(

c语言一个例子对比php学习随记

今天开始学写一些简单的C例子,发现很多和PHP不一样的地方,做个笔记. #include <stdio.h> int main(void) { int a,b; printf("请输入整数a"); //这里是用双引号,不能用单引号,PHP类似的地方可以用单引号,这里需注意 scanf("%d",&a); //获取用户输入值存入a printf("请输入整数b"); scanf("%d",&b);//

判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例子还有点不一样)

在Win7下(Vista以上的...)有时某些操作就是会让人郁闷 开启了UAC的话,得以管理员权限运行才不会出现Access is denied... 但是,程序又不是非得什么时候都用那破管理员权限的 总不能在manifest里加权限,然后用户运行时老弹确认吧? 当然啦,可以将需要管理员权限的部分写到另一个小程序,需要时调用它就行了 不过还是不爽,如果是一个小小的程序还要再加另一个小小小程序的话 那好,干脆判断是不是Win7...开启了UAC没有之类 开启的话再判断下是不是以管理员权限运行,不是

Web前端入门学习(6)——浮动例子之鉴赏

浮动例子之鉴赏 在浮动原理及清除浮动一文中(http://cherry360.blog.51cto.com/12176744/1864258),简单介绍了浮动的相关基础知识,为了巩固知识点,本篇结合代码展示关于浮动的几个常见例子. 例1:九格子 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>九格子</titl