实践-python简单实现概率分布
作业链接:
https://mp.weixin.qq.com/s/YtAicIlJIvPT4DHayjc5dg
前言:
在代码动手练习前,先补充2个概念
概率质量函数:描述离散数据,由mass翻译过来的,可以理解为离散型数据是块状物体,物体是有质量,所以叫做概率质量函数。为离散型直方图缩写为PMF。
概率密度函数:描述连续性数据。就是落在某个区间内的概率多大。这个就像液体,液体是连续的。同等体积有些液体重有些液体轻,用密度这个词描述会更合适。缩写为PDF。
另外,在做伪造随机分布试验时,最好size参数设置大点,避免结果波动较大。
实现:
公共部分
import matplotlib.pyplotas plt
from pylabimport mpl
import numpyas np
from scipyimport stats
plt.rcParams['font.sans-serif'] = ['FangSong']#指定画图时编码,以免中文乱码
plt.rcParams['axes.unicode_minus'] =False
离散型变量
1.伯努利分布
#伯努利分布
x = [0,1]
p0 =0.5
p = [p0,1-p0]
plt.bar(x, p)
plt.xlabel("事件")
plt.ylabel("概率")
plt.title("伯努利分布概率分布")
plt.show()
2.二项分布
#二项分布
p =0.3
n =3
k = np.arange(0, n+1)
binomial = stats.binom.pmf(k, n, p)
plt.bar(k, binomial)
plt.xlabel("hit_times")
plt.ylabel("probability")
plt.title("二项分布概率分布")
plt.show()
3.泊松分布
lam=5
x = np.random.poisson(lam =lam,size =1000)
plt.hist(x,bins =100)
plt.title("泊松分布概率分布")
plt.show()
4.均匀分布
def func_p_avg(x):
return 1/(x.max() - x.min())
x = np.arange(1,10)
y = [func_p_avg(x)] *len(x)
plt.plot(x, y)
plt.title("均匀分布概率分布")
plt.show()
连续型变量
1.正态分布
mu =0.0
sigma =1.0
x = np.arange(-10,10,0.1)
y = stats.norm.pdf(x, mu, sigma)
plt.plot(x,y)
plt.title("正态分布概率分布")
plt.show()
2.BETA分布
a =0.5
b =0.5
x = np.arange(0,1,0.01)
y = stats.beta.pdf(x, a, b)
plt.plot(x, y)
plt.title("beta分布概率分布")
plt.show()
3.实验模拟二项分布与正态分布
伪造上面2000组实验数据
二项分布
X = stats.binom.rvs(n,p,size=2000)# 伪造符合二项分布的随机变量 (random variates)
plt.hist(X,normed=True)#作出上面满足二项分布随机变量的频率分布直方图 不指定参数时统计的为频数分布
plt.title("模拟二项分布概率分布")
plt.show()
正态分布
# 伪造符合正态分布的随机变量X
# 通过loc和scale参数可以指定随机变量的偏移和缩放参数。对于正态分布的随机变量来说,这两个参数相当于指定其期望值和标准差:
X = stats.norm.rvs(loc=1.0,scale=2.0,size=1000)
#⑨作出上面正态分布随机变量的频率分布直方图
plt.hist(X,normed=True,histtype='stepfilled',alpha=0.2)
plt.legend(loc='best',frameon=False)
plt.title("模拟正态分布概率分布")
plt.show()