numpy.random.RandomState.dirichlet#

方法

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

从Dirichlet分布中抽取样本.

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

备注

新代码应使用 Generator 实例的 dirichlet 方法;请参阅 快速开始.

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

分布的参数(样本长度为 k 的长度).

size整数或整数的元组,可选

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

返回:
samplesndarray,

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

引发:
ValueError

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

参见

random.Generator.dirichlet

应用于新代码.

备注

狄利克雷分布是一种在满足条件 \(x_i>0\)\(\sum_{i=1}^k x_i = 1\) 的向量 \(x\) 上的分布.

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

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

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

该方法使用以下性质进行计算:设 \(Y\) 是一个随机向量,其分量服从标准伽马分布,则 \(X = \frac{1}{\sum_{i=1}^k{Y_i}} Y\) 服从狄利克雷分布

参考文献

[1]

大卫·麦凯,《信息论、推理与学习算法》,第23章,https://www.inference.org.uk/mackay/itila/

[2]

Wikipedia, “Dirichlet 分布”, 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