千家信息网

Python如何实现随机采样及概率分布

发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章主要介绍了Python如何实现随机采样及概率分布,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 二项(binomial)/
千家信息网最后更新 2025年11月11日Python如何实现随机采样及概率分布

这篇文章主要介绍了Python如何实现随机采样及概率分布,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

1. 二项(binomial)/伯努利(Bernoulli)分布

1.1 概率质量函数(pmf)

二项分布P(X=x; n, p)可以表示进行独立重复试验n次,每次有两成功和失败可能结果(分别对应概率p和1−p),共成功x次的概率。

1.2 函数原型

random.binomial(n, p, size=None)

参数:

n: int or array_like of ints   对应分布函数中的参数 n,>=0,浮点数会被截断为整形。
p: float or array_like of floats   对应分布函数参数p, >=0并且<=1。
size: int or tuple of ints, optional   如果给定形状为(m,n,k),那么m×n×k个随机样本会从中抽取。默认为None,即返回一个一个标量随机样本。

返回:

out: ndarray or scalar  从带参数的概率分布中采的随机样本,每个样本表示独立重复实验n次中成功的次数。

1.3 使用样例

设进行独立重复实验10次,每次成功概率为0.5,采样样本表示总共的成功次数(相当于扔10次硬币,正面朝上的次数)。总共采20个样本。

import numpy as npn, p = 10, .5  s = np.random.binomial(n, p, 20)print(s) # [4 5 6 5 4 2 4 6 7 2 4 4 2 4 4 7 6 3 5 6]

可以粗略的看到,样本几乎都在5周围上下波动。
我们来看一个有趣的例子。一家公司钻了9口井,每口井成功的概率为0.1,所有井都失败了,发生这种情况的概率是多少?
我们总共采样2000次,来看下产生0结果的概率。

s = sum(np.random.binomial(9, 0.1, 20000) == 0)/20000.print(s) # 0.3823

可见,所有井失败的概率为0.3823,这个概率还是蛮大的。

2. 多项(multinomial)分布

2.1 概率质量函数(pmf)

也就是说,多项分布式二项分布的推广:仍然是独立重复实验n次,但每次不只有成功和失败两种结果,而是k种可能的结果,每种结果的概率为pi。多项分布是一个随机向量的分布,x=(x1,x2,...,xk)意为第i种结果出现xi次,P(X=x; n, p)也就表示第i种结果出现xi次的概率。

2.2 函数原型

random.multinomial(n, pvals, size=None)

参数:

n: int   对应分布函数中的参数 n。
pvals: sequence of floats   对应分布函数参数p, 其长度等于可能的结果数k,并且有0⩽pi⩽1。
size: int or tuple of ints, optional   为输出形状大小,因为采出的每个样本是一个随机向量,默认最后一维会自动加上k,如果给定形状为(m,n),那么m×n个维度为k的随机向量会从中抽取。默认为None,即返回一个一个k维的随机向量。

返回:

out: ndarray   从带参数的概率分布中采的随机向量,长度为可能的结果数k,如果没有给定 size,则shape为 (k,)。

2.3 使用样例

设进行独立重复实验20次,每次情况的概率为1/6,采样出的随机向量表示每种情况出现次数(相当于扔20次六面骰子,点数为0, 1, 2, ..., 5出现的次数)。总共采1个样本。

s = np.random.multinomial(20, [1/6.]*6, size=1)print(s) # [[4 2 2 3 5 4]]

当然,如果不指定size,它直接就会返回一个一维向量了

s = np.random.multinomial(20, [1/6.]*6)print(s) # [4 1 4 3 5 3]

如果像进行多次采样,改变 size即可:

s = np.random.multinomial(20, [1/6.]*6, size=(2, 2))print(s)# [[[4 3 4 2 6 1]#   [5 2 1 6 3 3]]#  [[5 4 1 1 6 3]#   [2 5 2 5 4 2]]]

这个函数在论文[1]的实现代码[2]中用来设置每一个 client分得的样本数:

for cluster_id in range(n_clusters):     weights = np.random.dirichlet(alpha=alpha * np.ones(n_clients))    clients_counts[cluster_id] = np.random.multinomial(clusters_sizes[cluster_id], weights)    # 一共扔clusters_sizes[cluster_id]次筛子,该函数返回骰子落在某个client上各多少次,也就对应着该client应该分得的样本数

3.均匀(uniform)分布

3.1 概率密度函数(pdf)

均匀分布可用于随机地从连续区间[a,b)内进行采样。

3.2 函数原型

random.uniform(low=0.0, high=1.0, size=None)

参数:

low: float or array_like of floats, optional   对应分布函数中的下界参数 a,默认为0。
high: float or array_like of floats   对应分布函数中的下界参数 b,默认为1.0。
size: int or tuple of ints, optional   为输出形状大小,如果给定形状为(m,n,k),那么m×n×k的样本会从中抽取。默认为None,即返回一个单一标量。

返回:

out: ndarray or scalar   从带参数的均匀分布中采的随机样本

3.3 使用样例

s = np.random.uniform(-1,0,10)print(s)# [-0.9479594  -0.86158902 -0.63754099 -0.0883407  -0.92845644 -0.11148294#  -0.19826197 -0.77396765 -0.26809953 -0.74734785]

4. 狄利克雷(Dirichlet)分布

4.1 概率密度函数(pdf)

P(x;α)∝∏i=1kxαi−1ix=(x1,x2,...,xk),xi>0,∑i=1kxi=1α=(α1,α2,...,αk).αi>0

4.2 函数原型

random.dirichlet(alpha, size=None)

参数:
alpha: sequence of floats, length k   对应分布函数中的参数向量 α,长度为k。
size: int or tuple of ints, optional   为输出形状大小,因为采出的每个样本是一个随机向量,默认最后一维会自动加上k,如果给定形状为(m,n),那么m×n个维度为k的随机向量会从中抽取。默认为None,即返回一个一个k维的随机向量。

返回:

out: ndarray   采出的样本,大小为(size,k)。

4.3 使用样例

设α=(10,5,3)(意味着k=3),size=(2,2),则采出的样本为2×2个维度为k=3的随机向量。

s = np.random.dirichlet((10, 5, 3), size=(2, 2))print(s)# [[[0.82327647 0.09820451 0.07851902]#   [0.50861077 0.4503409  0.04104833]]#  [[0.31843167 0.22436547 0.45720285]#   [0.40981943 0.40349597 0.1866846 ]]]

这个函数在论文[1]的实现代码[2]中用来生成符合狄利克雷分布的权重向量

for cluster_id in range(n_clusters):     # 为每个client生成一个权重向量,文章中分布参数alpha每一维都相同    weights = np.random.dirichlet(alpha=alpha * np.ones(n_clients))    clients_counts[cluster_id] = np.random.multinomial(clusters_sizes[cluster_id], weights)

感谢你能够认真阅读完这篇文章,希望小编分享的"Python如何实现随机采样及概率分布"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

概率 函数 样本 参数 向量 结果 形状 成功 次数 独立 从中 原型 大小 篇文章 一维 实验 抽取 情况 维度 长度 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发类项目总结报告 大学生开展网络安全教育 网络安全校园日知识问答 杭州琶顾网络技术有限公司 软件开发属于哪个主营业务类别 数据库的应用程序名称设置 南通视频网络技术有限公司 软件开发是否应该抹杀个人创造性 挽言网络技术教程网 计算机网络技术专用电脑 软件开发人员自我描述文案 成都从零网络技术有限公司 新乡市明煜网络技术有限公司 网络安全符合国家的什么要求 ny是软件开发的意思吗 攻略互娱海南互联网科技有限 网络安全主题手抄报以手机为主 广州市毛毛球网络技术有限公司 软件开发过程哪些普遍现象 河北ios软件开发信息推荐 江苏进口计算机网络技术推广经历 ios楚留香去哪个服务器 网络安全事件分级分类 网络安全招聘试题 引文数据库中的交叉引用属什么 天刀服务器人数 服务器管理工具 网页 登录苹果id连接服务器时出错 网络安全风险图解 网络安全风险点排查明细表
0