maxframe.tensor.random.hypergeometric#

maxframe.tensor.random.hypergeometric(ngood, nbad, nsample, size=None, chunk_size=None, gpu=None, dtype=None)[源代码]#

从超几何分布中抽取样本。

样本从具有指定参数的超几何分布中抽取,参数包括 ngood(做出好选择的方式数)、nbad(做出坏选择的方式数)和 nsample(抽取的项目数),其中 nsample 小于或等于 ngood + nbad 的总和。

参数:
  • ngood (int or array_like of ints) -- 做出好选择的方式数。必须为非负数。

  • nbad (int or array_like of ints) -- 做出坏选择的方式数。必须为非负数。

  • nsample (int or array_like of ints) -- 抽取的项目数。必须至少为 1 且至多为 ngood + nbad

  • size (int or tuple of ints, optional) -- 输出形状。如果给定形状,例如 (m, n, k),则抽取 m * n * k 个样本。如果 size 为 None``(默认),且 ``ngoodnbadnsample 均为标量,则返回单个值。否则抽取 np.broadcast(ngood, nbad, nsample).size 个样本。

  • chunk_size (int or tuple of int or tuple of ints, optional) -- 每个维度上的期望块大小

  • gpu (bool, optional) -- 如果为 True,则在 GPU 上分配张量,默认为 False

  • dtype (data-type, optional) -- 返回张量的数据类型。

返回:

out -- 从参数化的超几何分布中抽取的样本。

返回类型:

Tensor or scalar

参见

scipy.stats.hypergeom

概率密度函数、分布函数或累积密度函数等。

备注

超几何分布的概率密度为

\[P(x) = \frac{\binom{m}{n}\binom{N-m}{n-x}}{\binom{N}{n}},\]

其中 \(0 \le x \le m\)\(n+m-N \le x \le n\)

对于 P(x),x 表示成功的次数,n = ngood,m = nbad,N = 样本数。

考虑一个装有黑色和白色弹珠的罐子,其中 ngood 个为黑色,nbad 个为白色。如果在不放回的情况下抽取 nsample 个球,则超几何分布描述了抽样样本中黑球的分布情况。

注意,该分布与二项分布非常相似,不同之处在于此时样本是不放回抽取的,而在二项分布中样本是放回抽取的(或者样本空间是无限的)。当样本空间变大时,该分布趋近于二项分布。

引用

示例

从分布中抽取样本:

>>> import maxframe.tensor as mt
>>> ngood, nbad, nsamp = 100, 2, 10
# number of good, number of bad, and number of samples
>>> s = mt.random.hypergeometric(ngood, nbad, nsamp, 1000)
>>> hist(s)
#   note that it is very unlikely to grab both bad items

假设你有一个装有15个白色和15个黑色弹珠的瓮。如果你随机抽取15个弹珠,其中12个或更多弹珠是同一种颜色的概率是多少?

>>> s = mt.random.hypergeometric(15, 15, 15, 100000)
>>> (mt.sum(s>=12)/100000. + mt.sum(s<=3)/100000.).execute()
#   answer = 0.003 ... pretty unlikely!