numpy.random.RandomState.dirichlet#

method

random.RandomState.dirichlet(alpha, size=None)#

从 Dirichlet 分布中抽取样本.

从 Dirichlet 分布中抽取维度为 k 的 size 个样本.Dirichlet 分布的随机变量可以看作是 Beta 分布的多元推广.Dirichlet 分布是贝叶斯推断中多项分布的共轭先验.

备注

新代码应该使用 dirichlet 方法,该方法是 Generator 实例的一个方法;请参阅 快速入门 .

参数:
alpha浮点数序列,长度为 k

分布的参数(长度为“k”,用于长度为“k”的样本).

sizeint 或 int 的元组,可选.

输出形状.如果给定形状是,例如“(m,n)”,则抽取“m * n * k”个样本.默认值为“None”,在这种情况下,将返回长度为“k”的向量.

返回:
样本ndarray,

提取的样本,形状为 (size, k) .

提出:
ValueError

如果 alpha 中的任何值小于或等于零

参见

random.Generator.dirichlet

新代码应该使用这个.

注释

Dirichlet 分布是向量上的分布 \(x\) ,满足条件 \(x_i>0\)\(\sum_{i=1}^k x_i = 1\) .

Dirichlet 分布随机向量 \(p\) 的概率密度函数 \(X\) 与下式成正比:

\[p(x) \propto \prod_{i=1}^{k}{x^{\alpha_i-1}_i},\]

其中 \(\alpha\) 是包含正浓度参数的向量.

该方法使用以下属性进行计算:设 \(Y\) 是一个随机向量,其分量遵循标准伽马分布,则 \(X = \frac{1}{\sum_{i=1}^k{Y_i}} Y\) 是 Dirichlet 分布的

参考

[1]

David McKay, “Information Theory, Inference and Learning Algorithms,” chapter 23, https://www.inference.org.uk/mackay/itila/

[2]

Wikipedia, “Dirichlet distribution”, https://en.wikipedia.org/wiki/Dirichlet_distribution

示例

以维基百科中引用的一个例子为例,如果有人想将字符串(每个字符串的初始长度为 1.0)切割成 K 段不同长度的字符串,其中每段字符串平均都有一个指定的平均长度,但允许各段字符串的相对大小存在一些差异,则可以使用此分布.

>>> s = np.random.dirichlet((10, 5, 3), 20).transpose()
>>> import matplotlib.pyplot as plt
>>> plt.barh(range(20), s[0])
>>> plt.barh(range(20), s[1], left=s[0], color='g')
>>> plt.barh(range(20), s[2], left=s[0]+s[1], color='r')
>>> plt.title("Lengths of Strings")
../../../_images/numpy-random-RandomState-dirichlet-1.png