我是靠谱客的博主 失眠绿茶,最近开发中收集的这篇文章主要介绍【Python】Beta分布详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

投硬币,硬币是正还是反,这属于两点分布的问题。

疯狂投硬币,正面出现的次数,服从二项分布:【Python】从二项分布到泊松分布

二项分布中,若特定时间内的伯努利试验次数趋于无穷大,那么在某一时刻发生某事件的概率,服从泊松分布

在某一时刻,发生第N次事件,其概率服从 Γ Gamma Γ分布:【Python】Gamma分布详解

回到抛硬币的问题,如果硬币出现正反的概率是未知的,考虑到时间地点重力等因素的不同,硬币出现正面的概率甚至可能是不稳定的,换言之,硬币出现正面的概率,或许也是服从某种分布的。

暂且将这个概率设为 θ theta θ,则经过n次伯努利试验,在 θ theta θ发生的情况下,正面出现 k k k次的概率为

π ( k ∣ θ ) = ( n k ) θ k ( 1 − θ ) n − k pi(kverttheta)=binom{n}{k}theta^k(1-theta)^{n-k} π(kθ)=(kn)θk(1θ)nk

由于这个 θ theta θ实际上是未知的,但这个 P P P却可通过不断地伯努利试验来去逼近,所以接下来就可以通过贝叶斯公式,来将 θ theta θ表达出来

π ( θ ∣ k ) = π ( k ∣ θ ) π ( θ ) ∫ π ( k ∣ θ ) π ( θ ) d θ pi(thetavert k)=frac{pi(kverttheta)pi(theta)}{intpi(k|theta)pi(theta)text dtheta} π(θk)=π(kθ)π(θ)dθπ(kθ)π(θ)

其中, π ( θ ∣ k ) pi(thetavert k) π(θk)表示 k k k发生的情况下, θ theta θ发生的概率; π ( θ ) pi(theta) π(θ) θ theta θ发生的概率。

θ theta θ服从均匀分布,则在 ( 0 , 1 ) (0,1) (0,1)范围内,其概率密度 π ( θ ) = 1 pi(theta)=1 π(θ)=1,于是 π ( θ ∣ k ) pi(thetavert k) π(θk)可以写为

π ( θ ∣ k ) = θ k ( 1 − θ ) n − k ∫ θ k ( 1 − θ ) n − k d θ pi(thetavert k)=frac{theta^k(1-theta)^{n-k}}{inttheta^k(1-theta)^{n-k}text dtheta} π(θk)=θk(1θ)nkdθθk(1θ)nk

由于 Γ ( x ) = ∫ 0 ∞ t x − 1 e − t d t Gamma(x)=int^infty_0t^{x-1}e^{-t}text dt Γ(x)=0tx1etdt,则上式可写为

π ( θ ∣ k ) = Γ ( n + 1 ) Γ ( k + 1 ) Γ ( n − k + 1 ) θ k ( 1 − θ ) n − k pi(thetavert k)=frac{Gamma(n+1)}{Gamma(k+1)Gamma(n-k+1)}theta^k(1-theta)^{n-k} π(θk)=Γ(k+1)Γ(nk+1)Γ(n+1)θk(1θ)nk

此即 B Beta B分布。

所以, B Beta B分布就是在抛 n n n次硬币,出现 k k k次正面后,则单次抛硬币出现正面的概率。

在Numpy中,random.beta(a,b)即为 B Beta B分布,其表达式为 p ( x ) = Γ ( a + b ) Γ ( a ) Γ ( b ) x a − 1 ( 1 − x ) b − 1 p(x)=frac{Gamma(a+b)}{Gamma(a)Gamma(b)}x^{a-1}(1-x)^{b-1} p(x)=Γ(a)Γ(b)Γ(a+b)xa1(1x)b1

显而易见,当 a = b = 1 a=b=1 a=b=1时, p ( x ) = 1 p(x)=1 p(x)=1,退化为均匀分布。

当a和b的取值不同时, B Beta B分布表现出不同的分布特性

import numpy as np
import matplotlib.pyplot as plt
from numpy.random import beta

a_s = [0.5, 5, 1, 2, 2]
b_s = [0.5, 1, 3, 2, 5]

for a,b in zip(a_s, b_s):
    xs = beta(a, b, size=20000)
    plt.hist(xs, 100, alpha=0.5, label=f"a={a}, b={b}")

plt.legend()
plt.show()

效果为

在这里插入图片描述

最后

以上就是失眠绿茶为你收集整理的【Python】Beta分布详解的全部内容,希望文章能够帮你解决【Python】Beta分布详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部