beta分布的直观理解

前言

在学习统计学习方法第一章习题中,有提到伯努利模型的贝叶斯估计。在网上的各种解答中,都有出现一个beta分布——“贝塔分布是一个作为伯努利分布和二项式分布的共轭先验分布的密度函数”。对于数学基础不好的我来说难以理解这一过程,也不知道为什么采用beta分布而不是别的分布,因此在网上寻找对于beta分布的资料。本篇文章即是在stackexchange中的一篇回答,个人认为能对beta分布有一个简单的直观了解。

what-is-the-intuition-behind-beta-distribution

正文

简单来说,Beta分布可以理解为一个概率的分布,也就是说,当我们不知道一个概率是什么时,它代表了该概率的所有可能值。这是我最喜欢的对这一点的直观解释。

任何关注棒球的人都熟悉打击率–简单地说就是一个球员得到安打的次数除以他上场打击的次数(所以它只是 0 0 0 1 1 1之间的一个百分比)。一般来说, 0.266 0.266 0.266被认为是一个平均打击率,而 0.300 0.300 0.300被认为是一个优秀的打击率。

想象一下,我们有一个棒球运动员,我们想预测他整个漫长赛季的平均打击率是多少。你可能会说,我们可以只使用他到目前为止的平均数——但在赛季刚刚开始时,这将是一个非常糟糕的衡量标准!如果一个球员第一场上场击球并得到一个一垒安打,他的平均打击率就会短暂地达到 1.000 1.000 1.000,而如果他被三振出局,他的平均打击率就是 0.000 0.000 0.000。如果你上场击球五次或六次,情况也不会好到哪里去——你可能得到一次幸运的连击,得到 1.000 1.000 1.000的平均数,或者一次不幸运的连击,得到 0 0 0的平均数,这两种情况都不能很好地预测你那个赛季的打击情况。

为什么你前几个安打的平均数不能很好地预测你最终的打击率?当一个球员的第一次击球是三振出局,为什么没有人预测他整个赛季都不会得到安打?因为我们是带着事先的期望去的。我们知道,在历史记录中,大多数赛季的平均打击率都徘徊在 0.215 0.215 0.215 0.360 0.360 0.360之间,其中也当然会有一些极为罕见的例外。我们知道,如果一个球员在开始时连续拿到几个三振出局,这可能表明他最终会比平均水平差一点,但我们知道他可能不会偏离这个范围。

鉴于我们的打击率问题可以用二项分布(一系列的成功和失败)来表示,表示这些先验期望(我们在统计学中称之为先验prior)的最好方法是Beta分布——它告诉我们,在看到球员第一次挥棒之前,我们大致期望他的打击率是多少。Beta分布的定义域是 ( 0 , 1 ) (0,1) (0,1),跟概率的定义域一样,所以Beta分布确实能表示概率的分布,而且用它来表示这项任务(译者注:可能指棒球打击率这类二项分布任务)的合适性远远超出了我们想象。

我们预计该球员的整个赛季平均击打率很可能在 0.27 0.27 0.27左右,但也有可能在 0.21 0.21 0.21 0.35 0.35 0.35之间,这是合理的。这可以用参数 α = 81 \alpha=81 α=81 β = 219 \beta=219 β=219的Beta分布来表示。

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import beta

x = np.linspace(0,1,1000)[1:-1]
a, b = 81, 219
dist = beta(a,b)
y = dist.pdf(x)
plt.plot(x,y)
plt.show()

在这里插入图片描述

这里我给出的两个参数的原因如下

  • 他们的均值是 α α + β = . 270 \frac{\alpha}{\alpha+\beta}=.270 α+βα=.270
  • 你可以在图像中看到整个分布基本在 ( 0.2 , 0.35 ) (0.2, 0.35) (0.2,0.35)之间,这是一个合理的整个赛季的打击率的区间。
    你问X轴在Beta分布密度图中代表什么——这里代表他的平均打击率。因此,请注意,在这种情况下,不仅Y轴是一个概率(或者更准确地说,是一个概率密度),X轴也是(毕竟,打击率只是一个打击的概率)。Beta分布是代表一个概率分布的概率。

    那么接下来讨论的是为什么用它来表示这项任务的合适性远远超出了我们想象。想象一下,球员得到一个安打。他本赛季的记录现在是1支安打、1次击球。然后,我们必须更新我们的概率——我们要把整个曲线移过来一点,以反映我们的新信息。虽然证明这一点的数学方法有点复杂(点这儿了解),但结果却非常简单。新的Beta分布将是:
    B e t a ( α 0 + 击 中 数 , β 0 + 未 击 中 数 ) Beta(\alpha_0+击中数,\beta_0+未击中数) Beta(α0+,β0+)

其中, α 0 \alpha_0 α0 β 0 \beta_0 β0就是初始值 81 81 81 219 219 219,因此现在(击中一次后) α = 82 \alpha=82 α=82,我们重新画出图像。
在这里插入图片描述
可以发现,跟之前比根本没有肉眼可见的变动,这是因为一次的击打means nothing。

但是随着赛季的进行,更多的击球数据会给到这个曲线更多证据(evidence),基于这些事实曲线会越来越窄越来越趋于选手真实的赛季平均击打率。现在假设,赛程过半,选手上场击球300次,击中100次。新的Beta分布如下图:

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import beta

x = np.linspace(0,1,1000)[1:-1]
a, b = 81+100, 219+200
dist = beta(a,b)
y = dist.pdf(x)
plt.plot(x,y)
plt.show()

在这里插入图片描述

请注意,现在的曲线比以前更细,而且向右偏移(更高的打击率)——我们对球员的打击率有了更好的认识。

这个公式最有趣的输出之一是产生的Beta分布的期望值,这基本上是你的新估计。回顾一下,Beta分布的期望值是 α α + β \frac{\alpha}{\alpha+\beta} α+βα。因此,在300次真实击球中的100次击中后,新的Beta分布的期望值为 81 + 100 81 + 100 + 219 + 200 = . 303 \frac{81+100}{81+100+219+200}=.303 81+100+219+20081+100=.303,注意这要比朴素的频率估计要低 100 100 + 200 = . 333 \frac{100}{100+200}=.333 100+200100=.333。你可能会注意到,这个公式相当于在一个球员的安打和非安打数上加了一个 “先手”——“在本赛季开始时,他的记录上有81个安打和219个非安打”。

因此,Beta分布最适合代表概率的概率分布:即我们事先不知道某个概率是什么,但我们有一些合理的猜测的情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值