Python如何实现随机采样及概率分布
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个样本。
importnumpyasnpn,p=10,.5s=np.random.binomial(n,p,20)print(s)#[45654246724424476356]
可以粗略的看到,样本几乎都在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)#[[422354]]
当然,如果不指定size
,它直接就会返回一个一维向量了
s=np.random.multinomial(20,[1/6.]*6)print(s)#[414353]
如果像进行多次采样,改变 size即可:
s=np.random.multinomial(20,[1/6.]*6,size=(2,2))print(s)#[[[434261]#[521633]]#[[541163]#[252542]]]
这个函数在论文<sup>[1]</sup>的实现代码<sup>[2]</sup>中用来设置每一个 client分得的样本数:
forcluster_idinrange(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.823276470.098204510.07851902]#[0.508610770.45034090.04104833]]#[[0.318431670.224365470.45720285]#[0.409819430.403495970.1866846]]]
这个函数在论文[1]的实现代码[2]中用来生成符合狄利克雷分布的权重向量
forcluster_idinrange(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如何实现随机采样及概率分布”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...