本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com
离散采样(discrete sampling)是指对离散变量按各个取值概率来抽取样本
本文介绍离散采样的原理与具体算法流程,并展示一个具体的离散采样采样例子和代码实现
通过本文,可以了解什么是离散采样,如何使用离散采样,以及离散采样的代码实现方法
本节讲解什么是离散采样,以及离散采样的算法流程
什么是离散采样
什么是离散采样
离散采样是指对离散变量按各个取值概率来抽取样本,它一般通过赌轮盘的方式来实现
下面以一个具体的例子来理解离散采样
已知离散变量属于的概率分别为,可按赌轮盘的方式来抽样
赌轮盘可以形象地理解离散采样的原理,具体实现时,则为如下:
![]()
先计算概率的累计值,得到,并将区间分别分配给
进一步,采样时只需生成一个(0,1)之间的均匀随机数,随机数落在哪个区间就将哪个区间对应的取值作为采样
例如,生成的随机数为0.2,它落在第二个区间中,则本次采样的取值为
上述方法是离散采样最常用的方法,它利用了概率的累计区间的长度就是概率值,从而进行采样
离散采样-算法流程
离散采样的流程具体如下:
一、计算的累积分布
即如下:
二、循环采样次:
按均匀分布选择一个随机数
落在哪个区间,就将该区间所对应的作为本次采样
本节展示一个离散采样的具体代码实现例子
离散采样-代码实现
离散采样只需先累计离散变量的概率,然后生成随机数,通过判断随机数所在区间来进行采样即可
具体代码实现示例如下:
import numpy as np
np.random.seed(999) # 设定随机种子
p = np.array([0.1,0.6,0.3]) # 目标采样概率分布
Psum = p.cumsum() # 累计概率
# ------ 采样 ------------
m = 10000 # 采样个数
x_sample = [] # 初始化采样结果
for i in range(m): # 逐个采样
r = np.random.rand() # 生成一个随机数
x = np.argwhere(Psum>r)[0][0] # 找出随机数所在的区间号
x_sample.append(x) # 将区间号作为采样结果
# ----- 统计采样结果 -------
stat = np.zeros(p.shape) # 初始化统计结果
for x in x_sample: # 逐个统计
stat[int(x)]=stat[int(x)]+1 # 将当前x的个数+1
stat=stat/stat.sum() # 计算占比
print('样本的个数占比:',stat) # 打印结果运行结果如下:
可见,最终采样的个数占比与目标采样分布是基本一致的
好了,以上就是离散采样的介绍、算法流程、以及具体代码实现了~
End
评论