scipy.stats.dirichlet#

scipy.stats.dirichlet = <scipy.stats._multivariate.dirichlet_gen object>[源代码]#

一个狄利克雷随机变量。

alpha 关键字指定了分布的浓度参数。

Added in version 0.15.0.

参数:
alphaarray_like

浓度参数。条目数量决定了分布的维度。

种子{None, int, np.random.RandomState, np.random.Generator}, 可选

用于绘制随机变量。如果 seedNone,则使用 RandomState 单例。如果 seed 是整数,则使用新的 RandomState 实例,并以 seed 为种子。如果 seed 已经是 RandomStateGenerator 实例,则使用该对象。默认值为 None

方法

pdf(x, alpha)

概率密度函数。

logpdf(x, alpha)

概率密度函数的对数。

rvs(alpha, size=1, random_state=None)

从狄利克雷分布中抽取随机样本。

mean(alpha)

狄利克雷分布的均值

var(alpha)

狄利克雷分布的方差

cov(alpha)

Dirichlet 分布的协方差

熵(alpha)

计算狄利克雷分布的微分熵。

注释

每个 \(\alpha\) 条目必须为正。该分布仅支持在由以下定义的单纯形上:

\[\sum_{i=1}^{K} x_i = 1\]

其中 \(0 < x_i < 1\)

如果分位数不在单纯形内,则会引发 ValueError。

dirichlet 的概率密度函数为

\[f(x) = \frac{1}{\mathrm{B}(\boldsymbol\alpha)} \prod_{i=1}^K x_i^{\alpha_i - 1}\]

哪里

\[\mathrm{B}(\boldsymbol\alpha) = \frac{\prod_{i=1}^K \Gamma(\alpha_i)} {\Gamma\bigl(\sum_{i=1}^K \alpha_i\bigr)}\]

以及 \(\boldsymbol\alpha=(\alpha_1,\ldots,\alpha_K)\),即浓度参数,\(K\)\(x\) 取值空间的维度。

请注意,dirichlet 接口在某种程度上是不一致的。rvs 函数返回的数组相对于 pdf 和 logpdf 预期的格式进行了转置。

示例

>>> import numpy as np
>>> from scipy.stats import dirichlet

生成一个狄利克雷随机变量

>>> quantiles = np.array([0.2, 0.2, 0.6])  # specify quantiles
>>> alpha = np.array([0.4, 5, 15])  # specify concentration parameters
>>> dirichlet.pdf(quantiles, alpha)
0.2843831684937255

相同的PDF,但遵循对数刻度

>>> dirichlet.logpdf(quantiles, alpha)
-1.2574327653159187

一旦我们指定了狄利克雷分布,我们就可以计算感兴趣的量

>>> dirichlet.mean(alpha)  # get the mean of the distribution
array([0.01960784, 0.24509804, 0.73529412])
>>> dirichlet.var(alpha) # get variance
array([0.00089829, 0.00864603, 0.00909517])
>>> dirichlet.entropy(alpha)  # calculate the differential entropy
-4.3280162474082715

我们也可以从分布中返回随机样本

>>> dirichlet.rvs(alpha, size=1, random_state=1)
array([[0.00766178, 0.24670518, 0.74563305]])
>>> dirichlet.rvs(alpha, size=2, random_state=2)
array([[0.01639427, 0.1292273 , 0.85437844],
       [0.00156917, 0.19033695, 0.80809388]])

或者,可以通过调用对象(作为函数)来固定浓度参数,返回一个“冻结”的狄利克雷随机变量:

>>> rv = dirichlet(alpha)
>>> # Frozen object with the same methods but holding the given
>>> # concentration parameters fixed.