Scipy_常见随机分布

Scipy_常见随机分布

Weijia Li

关注公众号,一起学习~

无聊e编程

在这里插入图片描述

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

前言

常用的方法

主要公共方法是:

rvs:随机变量

pdf:概率密度函数

pmf:离散变量质量函数

cdf:累积分布函数

sf:生存功能(1-CDF)

ppf:百分比点函数(CDF的逆)

isf:逆生存函数(SF的逆)

统计信息:返回均值,方差,(费舍尔)偏度或(费舍尔)峰度

矩:分布的非中心矩

常见连续变量

1.指数分布

mean,var,skew,kurt=expon.stats(moments='mvsk')
mean,var,skew,kurt#均值,方差,偏度,峰度

(array(1.), array(1.), array(2.), array(6.))


x=np.linspace(expon.ppf(0.01),expon.ppf(0.99),100)
plt.plot(x,expon.pdf(x),'b-',label='pdf')
r=expon.rvs(size=1000)
plt.hist(r,density=True,alpha=0.2)

在这里插入图片描述

2.均匀分布

mean,var,skew,kurt=uniform.stats(moments='mvsk')
mean,var,skew,kurt#均值,方差,偏度,峰度

(array(0.5), array(0.08333333), array(0.), array(-1.2))


x=np.linspace(uniform.ppf(0.01),uniform.ppf(0.99),10000)
plt.plot(x,uniform.pdf(x),'b-')
r=uniform.rvs(loc=0,scale=1,size=1000)
plt.hist(r,density=True,alpha=0.5)

在这里插入图片描述

3.正态分布

mean,var,skew,kurt=norm.stats(moments='mvsk')
mean,var,skew,kurt#均值,方差,偏度,峰度

(array(0.), array(1.), array(0.), array(0.))


x=np.linspace(norm.ppf(0.01),norm.ppf(0.99),100)
plt.plot(x,norm.pdf(x),'b-')
r=norm.rvs(loc=0,scale=1,size=1000)
plt.hist(r,density=True,alpha=0.2)

在这里插入图片描述

4.卡方分布

mean,var,skew,kurt=chi2.stats(df=55,moments='mvsk')
mean,var,skew,kurt#均值,方差,偏度,峰度

(array(55.), array(110.), array(0.38138504), array(0.21818182))
#自由度不同
df=40

x=np.linspace(chi2.ppf(0.01,df),chi2.ppf(0.99,df),100)
plt.plot(x,chi2.pdf(x,df),'r-')
y=np.linspace(chi2.ppf(0.01,df+4),chi2.ppf(0.99,df+4),100)
plt.plot(y,chi2.pdf(y,df+4),'g-')
z=np.linspace(chi2.ppf(0.01,df+8),chi2.ppf(0.99,df+8),100)
plt.plot(z,chi2.pdf(z,df+8),'y-')
w=np.linspace(chi2.ppf(0.01,df+12),chi2.ppf(0.99,df+12),100)
plt.plot(w,chi2.pdf(w,df+12),'b-')
#近似正态分布
o=np.linspace(chi2.ppf(0.01,100),chi2.ppf(0.99,100),100)
plt.plot(o,chi2.pdf(o,100),'m+')
r=chi2.rvs(df,size=1000)
plt.hist(r,density=True,alpha=0.2)

在这里插入图片描述

5.t分布

mean,var,skew,kurt=t.stats(df=55,moments='mvsk')
mean,var,skew,kurt

(array(0.), array(1.03773585), array(0.), array(0.11764706))


#当n接近60时,t分布近似正态分布(蓝色)
df=55
x=np.linspace(t.ppf(0.01,df),t.ppf(0.99,df),100)
plt.plot(x,t.pdf(x,df),'b-')
#小样本n=9
y=np.linspace(t.ppf(0.01,8),t.ppf(0.99,8),100)
plt.plot(y,t.pdf(x,8),'r-')
#大样本(近似正态分布)
z=np.linspace(t.ppf(0.01,1000),t.ppf(0.99,1000),100)
plt.plot(z,t.pdf(z,1000),'m+')
r=t.rvs(size=1000,df=df)
plt.hist(r,alpha=0.2,density=True)

在这里插入图片描述

6.F分布

dfn,dfd=29,18
mean,var,skew,kurt=f.stats(dfn,dfd,moments='mvsk')
mean,var,skew,kurt

(array(1.125), array(0.28055727), array(1.80656765), array(7.07463602))


x=np.linspace(f.ppf(0.01,dfn,dfd),f.ppf(0.99,dfn,dfd),100)
plt.plot(x,f.pdf(x,dfn,dfd),'b-')
r=f.rvs(dfn,dfd,size=1000)
plt.hist(r,density=True,alpha=0.2)

在这里插入图片描述

常见离散变量

1.0-1分布(伯努利分布)

p=0.2
mean,var,skew,kurt=bernoulli.stats(p,moments='mvsk')
mean,var,skew,kurt

(array(0.2), array(0.16), array(1.5), array(0.25))


x=np.arange(bernoulli.ppf(0.01,p),bernoulli.ppf(0.99,p)+1)
plt.plot(x,bernoulli.pmf(x,p),'bo',ms=8,lw=1)
plt.vlines(x,0,bernoulli.pmf(x,p),colors='b',lw=4,alpha=0.5)

在这里插入图片描述

#十次实验,成功和失败

bernoulli.rvs(p,size=10)

array([1, 0, 0, 0, 1, 0, 0, 1, 1, 0])

2.二项分布

#当n足够大时,近似正态分布
n,p=200,0.4
mean,var,skew,kurt=binom.stats(n,p,moments='mvsk')
mean,var,skew,kurt

(array(80.), array(48.), array(0.02886751), array(-0.00916667))


x=np.arange(binom.ppf(0.01,n,p),binom.ppf(0.99,n,p)+1)
plt.plot(x,binom.pmf(x,n,p),'bo',ms=8,lw=1)
plt.vlines(x,0,binom.pmf(x,n,p),colors='b',lw=4,alpha=0.5)

在这里插入图片描述

#十次n为200的伯努利实验,每次的成功实验数
binom.rvs(n,p,size=10)

array([86, 78, 81, 79, 75, 82, 72, 80, 69, 77])

3.几何分布

p=0.50
#概率越小,越密集;概率越大,越疏。
mean,var,skew,kurt=geom.stats(p,moments='mvsk')
mean,var,skew,kurt

(array(2.), array(2.), array(2.12132034), array(6.5))


x=np.arange(geom.ppf(0.01,p),geom.ppf(0.99,p)+1)
plt.plot(x,geom.pmf(x,p),'bo')
plt.vlines(x,0,geom.pmf(x,p),colors='b',alpha=0.2)

在这里插入图片描述

#十次实验,成功的次数
geom.rvs(p,size=10)

array([1, 4, 7, 2, 3, 1, 1, 2, 1, 1])

4.超几何分布

#假设我们有20种动物的集合,
#其中7种是狗。然后,如果我们
#想知道如果随机选择20只动物中
#的12只,则发现找到给定数量的
#狗的概率
[M, n, N] = [20, 7, 12]
mean,var,skew,kurt=hypergeom.stats(M,n,N,moments='mvsk')
mean,var,skew,kurt

(array(4.2), array(1.14947368), array(-0.06218122), array(-0.15266106))


x=np.arange(hypergeom.ppf(0.01,M,n,N)-1,hypergeom.ppf(0.99,M,n,N)+1)
plt.plot(x,hypergeom.pmf(x,M,n,N),'bo')
plt.vlines(x,0,hypergeom.pmf(x,M,n,N),'b',lw=2,alpha=0.2)

在这里插入图片描述

#进行十次M取N的实验,其中抽到n的次数

hypergeom.rvs(M,n,N,size=10)

array([4, 4, 4, 3, 4, 3, 4, 5, 5, 5])

5.poisson分布

mu=2
mean,var,skew,kurt=poisson.stats(mu,moments='mvsk')
mean,var,skew,kurt

(array(2.), array(2.), array(0.70710678), array(0.5))


x=np.arange(poisson.ppf(0.01,mu),poisson.ppf(0.99,mu)+1)
plt.plot(x,poisson.pmf(x,mu),'bo')
plt.vlines(x,0,poisson.pmf(x,mu),'b',alpha=0.2)

在这里插入图片描述

poisson.rvs(mu,size=10)

array([2, 2, 4, 1, 0, 4, 4, 5, 1, 1])

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值