Python:NumPy-随机抽样

本文深入探讨了Python的NumPy库在随机抽样中的应用,包括离散型随机变量的二项分布、泊松分布和超几何分布,以及连续型随机变量的均匀分布和正态分布。通过实例展示了如何使用numpy.random模块生成各种概率分布的随机样本,并解释了随机种子对实验重复性的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随机抽样

本文程序可直接运行,但图片导入有点问题;

numpy.random 模块对 Python 内置的 random 进行了补充,增加了一些用于高效生成多种概率分
布的样本值的函数,如正态分布、泊松分布等。

  • numpy.random.seed(seed=None) Seed the generator.

seed() 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed() 值,则每次生成的随
机数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间
差异而不同。

在对数据进行预处理时,经常加入新的操作或改变处理策略,此时如果伴随着随机操作,最好还是指
定唯一的随机种子,避免由于随机的差异对结果产生影响。

离散型随机变量

二项分布

二项分布可以用于只有一次实验只有两种结果,各结果对应的概率相等的多次实验的概率问题。比如
处理猜10次拳赢6次的概率等类似的问题。

二项分布概率函数的代码表示:binom.pmf(k) = choose(n, k) pk (1-p)(n-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(20201125)
n = 9
p = 0.1
size = 50000
x = np.random.binomial(n, p, size)
print(x)
print(np.sum(x==0)/size)

plt.hist(x)
plt.xlabel("随机变量:成功次数")
plt.ylabel("样本中出现的次数")
plt.show()

s = stats.binom.pmf(range(10),n,p)
print(np.around(s,3))
[2 0 0 ... 0 0 2]
0.3904

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gk6Mkzx3-1606315239569)(output_1_1.png)]

[0.387 0.387 0.172 0.045 0.007 0.001 0.    0.    0.    0.   ]

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

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

np.random.seed(20201125)
n = 2
p = 0.5
size = 50000
x = np.random.binomial(n,p,size)

print(np.sum(x==0)/size)
print(np.sum(x==1)/size)
print(np.sum(x==2)/size)

plt.hist(x, density=True)
plt.xlabel("随机变量:变量为正面次数")
plt.ylabel("50000个样本中出现的次数")
plt.show()

s = stats.binom.pmf(range(n+1),n,p)
print(np.around(s,3))
0.25018
0.50046
0.24936

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nKHoOxLt-1606315239571)(output_3_1.png)]

[0.25 0.5  0.25]

计算期望和方差

“”"
期望: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!

泊松概率函数的数学表示:

  • numpy.random.poisson(lam=1.0, size=None) Draw samples from a Poisson distribution.

表示对一个泊松分布进行采样, size 表示采样的次数, lam 表示一个单位内发生事件的平均值,函
数的返回值表示一个单位内事件发生的次数。

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

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
np.random.seed(20200605)
lam = 42 / 6  # 平均值:平均每十分钟接到42/6次订票电话
size = 50000
x = np.random.poisson(lam, size)

print(np.sum(x == 6) / size) # 0.14988
plt.hist(x)
plt.xlabel('随机变量:每十分钟接到订票电话的次数')
plt.ylabel('50000个样本中出现的次数')
plt.show()
# 用poisson.pmf(k, mu)求对应分布的概率:概率质量函数 (PMF)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值