机器学习-统计与数学

【介绍】一篇入门之-离散采样是什么

作者 : 老饼 发表日期 : 2022-06-09 05:18:29 更新日期 : 2025-12-29 06:21:23
本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com



离散采样(discrete sampling)是指对离散变量按各个取值概率来抽取样本

本文介绍离散采样的原理与具体算法流程,并展示一个具体的离散采样采样例子和代码实现

通过本文,可以了解什么是离散采样,如何使用离散采样,以及离散采样的代码实现方法






     01. 离散采样是什么    





本节讲解什么是离散采样,以及离散采样的算法流程





     什么是离散采样      


什么是离散采样
离散采样是指对离散变量按各个取值概率来抽取样本,它一般通过赌轮盘的方式来实现
 下面以一个具体的例子来理解离散采样
已知离散变量属于的概率分别为,可按赌轮盘的方式来抽样
 离散采样的赌轮盘
赌轮盘可以形象地理解离散采样的原理,具体实现时,则为如下:
 什么是离散采样 
先计算概率的累计值,得到,并将区间分别分配给
进一步,采样时只需生成一个(0,1)之间的均匀随机数,随机数落在哪个区间就将哪个区间对应的取值作为采样
 例如,生成的随机数为0.2,它落在第二个区间中,则本次采样的取值为
上述方法是离散采样最常用的方法,它利用了概率的累计区间的长度就是概率值,从而进行采样
      离散采样-算法流程      
 
离散采样的流程具体如下:
一、计算的累积分布                                              
 即如下:                               
               
二、循环采样次:                                                 
按均匀分布选择一个随机数            
              落在哪个区间,就将该区间所对应的作为本次采样








     02. 离散采样-代码实现     





本节展示一个离散采样的具体代码实现例子






      离散采样-代码实现      


离散采样只需先累计离散变量的概率,然后生成随机数,通过判断随机数所在区间来进行采样即可
 具体代码实现示例如下:
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 




图标 评论
添加评论