Python零基础投喂(2.随机抽样)

随机抽样

'''numpy.random 模块对 Python 内置的 random 进行了补充,增加了一些用于高效生成多种概率分
布的样本值的函数,如正态分布、泊松分布等。
numpy.random.seed(seed=None) Seed the generator.
seed() 用于指定随机数生成时所用算法开始的整数值,如果使用相同的 seed() 值,则每次生成的随
机数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间
差异而不同。
*注意:
在对数据进行预处理时,经常加入新的操作或改变处理策略,此时如果伴随着随机操作,最好还是指
定唯一的随机种子,避免由于随机的差异对结果产生影响。'''

一、离散型随机变量

1.二项分布

# 二项分布可以用于只有一次实验只有两种结果,各结果对应的概率相等的多次实验的概率问题。比如
# 处理猜10次拳赢6次的概率等类似的问题。
'''在一次试验中事件A出现的概率为p,事件A不出现的概率为q=1-p.
若以X记一次实验中A出现的次数,则X仅取0、1两个值。X=k的概率为
 p**k (1-p)**(n-k)则称X服从两点分布
 代码:
 numpy.random.binomial(n, p, size=None)
表示对一个二项分布进行采样, size 表示采样的次数, n 表示做了 n 重伯努利试验, p 表示成功的
概率,函数的返回值表示 n 中成功的次数。

'''
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
#举例:野外正在进行9(n=9)口石油勘探井的发掘工作,每一口井能够开发出油的概率是
#0.1(p=0.1)。请问,最终所有的勘探井都勘探失败的概率?
np.random.seed(20200605)
n=9
p=0.1
size=50000
#binomial n.二项分布
x=np.random.binomial(n,p,size)
np.set_printoptions(threshold=50)  #size>50,所以只能概略显示。
x
array([0, 2, 1, ..., 1, 0, 1])
print(np.sum(x==0)/size)
0.3897
'''或者使用binom.rvs
#使用binom.rvs(n, p, size=1)函数模拟一个二项随机变量,可视化地表现概率
y = stats.binom.rvs(n, p, size=size)#返回一个numpy.ndarray'''
y
# matplotlib可视化:hist()--直方图
#参数:
'''
x: 数据集,最终的直方图将对数据集进行统计
bins: 统计的区间分布
range: tuple, 显示的区间,range在没有给出bins时生效
density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
histtype: 可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
align: 可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
log: bool,默认False,即y坐标轴是否选择指数刻度
stacked: bool,默认为False,是否为堆积状图
alpha设置透明度,0为完全透明
'''
#plt.hist(x,bins=8)
plt.hist(x)
#plt.xlim(-1,6) #设置X轴范围
plt.xlabel('x')
plt.ylabel('y')
plt.show()
s = stats.binom.pmf(range(10), n, p)
print(np.around(s, 3))

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

[0.387 0.387 0.172 0.045 0.007 0.001 0.    0.    0.    0.   ]
#【例】模拟投硬币,投2次,请问两次都为正面的概率?
np.random.seed(20200605)
n=2
p=0.5
size=50000
x=np.random.binomial(n,p,size)
print(x)
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('Number of heads')
plt.ylabel('The number of occurrences')
[1 2 1 ... 1 0 1]
0.25154
0.49874
0.24972





Text(0, 0.5, 'The number of occurrences')

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

2.泊松分布

#泊松分布主要用于估计某个时间段某事件发生的概率。
#泊松概率函数的代码表示:poisson.pmf(k) = exp(-lam) lam*k / k!
#  numpy.random.poisson(lam=1.0, size=None)
# 表示对一个泊松分布进行采样, size 表示采样的次数, lam 表示一个单位内发生事件的平均值,函数的返回值表示一个单位内事件发生的次数。
#【例】假定某航空公司预定票处平均每小时接到42次订票电话,那么10分钟内恰好接到6次电话的概率是多少?
np.random.seed(20200605)
lam=42/6
size=50000
x=np.random.poisson(lam,size)
print(np.sum(x==6)/size)
plt.hist
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值