贝塔分布教程

NDIS herman 30浏览 0评论

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

贝塔分布(Beta Distribution) 是一个作为伯努利分布和二项式分布的共轭先验分布的密度函数,在机器学习和数理统计学中有重要应用。
贝塔分布中的参数可以理解为伪计数,伯努利分布的似然函数可以表示为,表示一次事件发生的概率,它为贝塔有相同的形式,因此可以用贝塔分布作为其先验分布。
概率论中还有一种称为贝塔(β,beta)分布的概率密度分布函数。

在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生成):

贝塔分布(beta distribution)

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

David Robinson 解释如下:

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

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

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

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

对于这个击球率问题,我们可以用二项分布表示(一系列的成功或失败事件),一个最好的方法来表示这些先验期望(统计中称为先验(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次打击”。那么我们更新我们的概率分布,让概率曲线做一些移动来反应我们的新信息。这里涉及一些数学上的证明,但是结论非常简单。新的贝塔分布为:

新的贝塔分布

其中 α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次不中的记录。

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

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

本文原文出处:业余草: » 贝塔分布教程