投硬币,硬币是正还是反,这属于两点分布的问题。
疯狂投硬币,正面出现的次数,服从二项分布:【Python】从二项分布到泊松分布
二项分布中,若特定时间内的伯努利试验次数趋于无穷大,那么在某一时刻发生某事件的概率,服从泊松分布。
在某一时刻,发生第N次事件,其概率服从Γ\GammaΓ分布:【Python】Gamma分布详解
回到抛硬币的问题,如果硬币出现正反的概率是未知的,考虑到时间地点重力等因素的不同,硬币出现正面的概率甚至可能是不稳定的,换言之,硬币出现正面的概率,或许也是服从某种分布的。
暂且将这个概率设为θ\thetaθ,则经过n次伯努利试验,在θ\thetaθ发生的情况下,正面出现kkk次的概率为
π(k∣θ)=(nk)θk(1−θ)n−k\pi(k\vert\theta)=\binom{n}{k}\theta^k(1-\theta)^{n-k} π(k∣θ)=(kn)θk(1−θ)n−k
由于这个θ\thetaθ实际上是未知的,但这个PPP却可通过不断地伯努利试验来去逼近,所以接下来就可以通过贝叶斯公式,来将θ\thetaθ表达出来
π(θ∣k)=π(k∣θ)π(θ)∫π(k∣θ)π(θ)dθ\pi(\theta\vert k)=\frac{\pi(k\vert\theta)\pi(\theta)}{\int\pi(k|\theta)\pi(\theta)\text d\theta} π(θ∣k)=∫π(k∣θ)π(θ)dθπ(k∣θ)π(θ)
其中,π(θ∣k)\pi(\theta\vert k)π(θ∣k)表示kkk发生的情况下,θ\thetaθ发生的概率;π(θ)\pi(\theta)π(θ)为θ\thetaθ发生的概率。
设θ\thetaθ服从均匀分布,则在(0,1)(0,1)(0,1)范围内,其概率密度π(θ)=1\pi(\theta)=1π(θ)=1,于是π(θ∣k)\pi(\theta\vert k)π(θ∣k)可以写为
π(θ∣k)=θk(1−θ)n−k∫θk(1−θ)n−kdθ\pi(\theta\vert k)=\frac{\theta^k(1-\theta)^{n-k}}{\int\theta^k(1-\theta)^{n-k}\text d\theta} π(θ∣k)=∫θk(1−θ)n−kdθθk(1−θ)n−k
由于Γ(x)=∫0∞tx−1e−tdt\Gamma(x)=\int^\infty_0t^{x-1}e^{-t}\text dtΓ(x)=∫0∞tx−1e−tdt,则上式可写为
π(θ∣k)=Γ(n+1)Γ(k+1)Γ(n−k+1)θk(1−θ)n−k\pi(\theta\vert k)=\frac{\Gamma(n+1)}{\Gamma(k+1)\Gamma(n-k+1)}\theta^k(1-\theta)^{n-k} π(θ∣k)=Γ(k+1)Γ(n−k+1)Γ(n+1)θk(1−θ)n−k
此即B\BetaB分布。
所以,B\BetaB分布就是在抛nnn次硬币,出现kkk次正面后,则单次抛硬币出现正面的概率。
在Numpy中,random.beta(a,b)
即为B\BetaB分布,其表达式为p(x)=Γ(a+b)Γ(a)Γ(b)xa−1(1−x)b−1p(x)=\frac{\Gamma(a+b)}{\Gamma(a)\Gamma(b)}x^{a-1}(1-x)^{b-1}p(x)=Γ(a)Γ(b)Γ(a+b)xa−1(1−x)b−1。
显而易见,当a=b=1a=b=1a=b=1时,p(x)=1p(x)=1p(x)=1,退化为均匀分布。
当a和b的取值不同时,B\BetaB分布表现出不同的分布特性
import numpy as np
import matplotlib.pyplot as plt
from numpy.random import betaa_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()
效果为