Beta分布

Beta分布

beta分布可以看做一个概率的概率分布。
首先试验是伯努利试验,它符合二项式分布。而Beta分布是先有一些试验结果,比如说有100个试验结果,其中30次成功,70次失败,然后在这个基础上继续试验,把新的试验结果加到原有结果上,beta分布就是这一系列操作后是某一概率的可能性大小,分布曲线的x轴是概率。
beta分布描述的就是我们不知道概率是多少,但是我们有一些先验结果,我们可以合理的猜测,beta分布就是作为表示概率的概率分布。
beta分布的概率密度函数是$$Betaleft( x|alpha ,eta ight) =dfrac {x^{alpha -1}left( 1-x ight) ^{eta -1}}{Bleft( alpha ,eta ight) }$$
其中$$Bleft( alpha ,eta ight) =dfrac {Gamma left( alpha ight) Gamma left( eta ight) }{Gamma left( alpha +eta ight) }$$
$alpha $和$eta $可以当成是成功和失败的次数。


Beta分布相关代码

#导入库
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

PDF

#PDF
plt.figure(figsize=(14,7))

x=np.linspace(0,1,100)
y=stats.beta.pdf(x,a=2,b=2)

plt.plot(x,y,color='b',label='PDF')
plt.fill_between(x,y,color='b',alpha=0.25)

plt.legend()
plt.show()

参数

$alpha $和$eta $比例相同,值不同。

#a和b比例相同,值不同
plt.figure(figsize=(14,7))

x=np.linspace(0,1,100)
y1=stats.beta.pdf(x,a=1,b=1)
y2=stats.beta.pdf(x,a=10,b=10)
y3=stats.beta.pdf(x,a=100,b=100)

plt.plot(x,y1,color='r',label=r'$alpha=1,eta=1$')
plt.fill_between(x,y1,color='r',alpha=0.25)

plt.plot(x,y2,color='g',label=r'$alpha=10,eta=10$')
plt.fill_between(x,y2,color='g',alpha=0.25)

plt.plot(x,y3,color='b',label=r'$alpha=100,eta=100$')
plt.fill_between(x,y3,color='b',alpha=0.25)

plt.legend()
plt.show()

$alpha $和$eta $比例不同,总和相同。

#a和b比例不同,总和相同
plt.figure(figsize=(14,7))

x=np.linspace(0,1,100)
y1=stats.beta.pdf(x,a=25,b=75)
y2=stats.beta.pdf(x,a=50,b=50)
y3=stats.beta.pdf(x,a=75,b=25)

plt.plot(x,y1,color='r',label=r'$alpha=25,eta=75$')
plt.fill_between(x,y1,color='r',alpha=0.25)

plt.plot(x,y2,color='g',label=r'$alpha=50,eta=50$')
plt.fill_between(x,y2,color='g',alpha=0.25)

plt.plot(x,y3,color='b',label=r'$alpha=75,eta=25$')
plt.fill_between(x,y3,color='b',alpha=0.25)

plt.legend()
plt.show()

随机样本

print(stats.beta.rvs(a=2,b=2))
print(stats.beta.rvs(a=2,b=2,size=10))

CDF

#CDF
plt.figure(figsize=(14,7))

x=np.linspace(0,1,100)
y=stats.beta.cdf(x,a=2,b=2)

plt.plot(x,y,color='b',label='CDF')

plt.legend()
plt.show()

区间概率

print('p(x<0.3)={:.3}'.format(stats.beta.cdf(a=2,b=2,x=0.3)))
print('p(0.2<x<0.8)={:.3}'.format(stats.beta.cdf(a=2,b=2,x=0.8)-stats.beta.cdf(a=2,b=2,x=0.2)))

原文地址:https://www.cnblogs.com/gloria-zhang/p/13187520.html