Numpy实战01——离散型随机变量

前言

  • numpy.random.seed(seed=None) Seed the generator
    seed() 用于指定随机数生成时所用算法开始的整数值,如果使用相同的 seed() 值,则每次生成的随机数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
    在对数据进行预处理时,经常加入新的操作或改变处理策略,此时如果伴随着随机操作,最好还是指定唯一的随机种子,避免由于随机的差异对结果产生影响。

离散型随机变量

二项分布

  • 二项分布可以用于只有一次实验只有两种结果,各结果对应的概率相等的多次实验的概率计算问题。比如处理10次猜拳赢6次的概率等类似的问题。
  • 二项分布概率函数的代码表示:binom.pmf(k) = choose(n, k) p**k (1-p)**(n-k)
  • 二项分布概率函数的数学表示:
    P { X = k } = C n k p k ( 1 − p ) k P\{X=k\}=C_n^kp^k(1-p)^k P{X=k}=Cnkpk(1p)k
    numpy.random.binomial(n, p, size=None) Draw samples from a binomial distribution
    表示对一个二项分布进行采样,size表示采样的次数,n表示做了n重伯努利试验,p表示成功的概率,函数的返回值表示n中成功的次数。

【例】野外正在进行 9(n=9)口石油勘探井的发掘工作,每一口井能够开发出油的概率是 0.1(p=0.1)。请问,最终所有的勘探井都勘探失败的概率?

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

np.random.seed(20201126)
n = 9 # 做某件事的次数
p = 0.1 # 做某件事情成功的概率
size = 50000 # 采样次数
x = np.random.binomial(n, p, size)
print(x)
print('随机抽样的概率值为',np.sum(x == 0) / size) # 全部失败的概率

plt.rc('font', family='SimHei', size=15)
plt.hist(x)

plt.xlabel('随机变量:成功次数')
plt.ylabel('样本中出现的次数')
plt.show()
# 它返回一个列表,列表中每个元素表示随机变量中对应值的概率

s = stats.binom.pmf(0, n, p)
print('理论概率值为',np.around(s, 5))

在这里插入图片描述

【例】模拟投硬币,投2次,请问两次都为正面的概率?

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

n = 2
p = 0.5
size = 10000
x = np.random.binomial(n, p, size)
print(x)
print('随机抽样的概率值为', np.sum(x == 2) / size)

plt.rc('font', family="SimHei", size=15)

plt.hist(x)
plt.xlabel('随机变量:正面朝上次数')
plt.ylabel('样本中出现次数')
plt.show()

s = stats.binom.pmf(range(n + 1), n, p)
print('理论概率值为', s)

在这里插入图片描述

  • 计算期望和方差
期望:E(x) = np 
方差:Var(x) = np(1‐p) 
利用stats.binom.stats(n, p, loc=0, moments='mv')计算期望和方差 
moments参数中:m为期望,v为方差 

泊松分布

  • 泊松分布主要用于估计某个时间段某事件发生的概率。
  • 泊松概率函数的代码表示:poisson.pmf(k) = exp(-lam) lam*k / k!
  • 泊松概率函数的数学表示:
    P { X = k ) } = λ k k ! e − λ , k = 0 , 1 , ⋯ P\{X = k)\}= \frac{\lambda^k}{k!}e^{-\lambda}, k = 0, 1, \cdots P{X=k)}=k!λkeλ,k=0,1,
    numpy.random.poisson(lam=1.0, size=None) Draw samples from a Poisson distribution
    表示对一个泊松分布进行采样, size 表示采样的次数, lam 表示一个单位内发生事件的平均值,函数的返回值表示一个单位内事件发生的次数。

【例】假定某航空公司预定票处平均每小时接到42次订票电话,那么10分钟内恰好接到6次电话的概率是多少?

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

np.random.seed(20201127)
lam = 42 / 6 # 平均每10分钟接到的电话
size = 50000
x = np.random.poisson(lam, size)
print(x)
print('随机抽样的概率值为',np.sum(x == 6) / size)

plt.rc('font', family='SimHei', size=15)
plt.hist(x)
plt.xlabel('随机变量:每10分钟接到的电话次数')
plt.ylabel('样本中出现的次数')
plt.show()

s = stats.poisson.pmf(6, lam)
print('理论概率值为', np.round(s, 6))

在这里插入图片描述

超几何分布

  • 在超几何分布中,各次实验不是独立的,各次实验成功的概率也不等。
  • 超几何分布概率函数的数学表示:
    P { k , M , n , N } = C n k C M − n N − k C M N P\{k,M,n,N\}=\frac{C_n^kC_{M-n}^{N-k}}{C_M^N} P{k,M,n,N}=CMNCnkCMnNk
    numpy.random.hypergeometric(ngood, nbad, nsample, size=None) Draw samples from a Hypergeometric distribution
    表示对一个超几何分布进行采样, size 表示采样的次数, ngood 表示总体中具有成功标志的元素个数, nbad 表示总体中不具有成功标志的元素个数, ngood+nbad 表示总体样本容量, nsample 表示抽取元素的次数(小于或等于总体样本容量),函数的返回值表示抽取 nsample 个元素中具有成功标识的元素个数。

【例】一共20只动物里有7只是狗,抽取12只有3只狗的概率(无放回抽样)。

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

# 一共20只动物里有7只是狗,抽取12只有3只狗的概率(无放回抽样)。
np.random.seed(20201127)
size = 50000
x = np.random.hypergeometric(ngood=7, nbad=13, nsample=12, size=size)
print(x)
print('随机抽样的概率值为',np.sum(x == 3) / size)

plt.rc('font', family='SimHei', size=15)
plt.hist(x)
plt.xlabel('随机变量:抽取的狗的数目')
plt.ylabel('样本中出现的次数')
plt.show()

s = stats.hypergeom.pmf(k=3, M=20, n=7, N=12)
print('理论概率值为',np.round(s, 3))

在这里插入图片描述

超几何分布的均值与方差 
均值E(x) = N(n/M) 
方差Var(x) = N(n/M)(1‐n/M)((M‐N)/(M‐1)) 
注释:考虑n次实验的超几何分布,令p=n/M,当总体容量足够大时((M‐N)/(M‐1))近似于1,
此时数学期望为 Np,方差为Np(1‐p). 
#用stats(M, n, N, loc=0, moments='mv')计算均值和方差 
stats.hypergeom.stats(20,7,12,moments='mv') 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值