numpy.random.Generator.dirichlet#

方法

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

從 Dirichlet 分佈中繪製樣本。

從 Dirichlet 分佈中繪製維度 k 的 size 個樣本。 Dirichlet 分佈隨機變數可以視為 Beta 分佈的多變量推廣。 Dirichlet 分佈是貝氏推論中多項式分佈的共軛先驗。

參數:
alpha浮點數序列,長度 k

分佈的參數(長度為 k,適用於長度為 k 的樣本)。

size整數或整數元組,選用

輸出形狀。如果給定的形狀為,例如 (m, n),則繪製 m * n * k 個樣本。預設值為 None,在這種情況下,會傳回長度為 k 的向量。

傳回值:
samplesndarray,

繪製的樣本,形狀為 (size, k)

引發:
ValueError

如果 alpha 中的任何值小於零

註解

Dirichlet 分佈是向量 \(x\) 的分佈,其滿足條件 \(x_i>0\)\(\sum_{i=1}^k x_i = 1\)

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\) 為 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

範例

以 Wikipedia 中引用的範例為例,如果想要將字串(每個字串的初始長度為 1.0)切割成 K 段不同長度的片段,其中每個片段平均而言具有指定的平均長度,但允許片段相對大小存在一些變異,則可以使用此分佈。

>>> rng = np.random.default_rng()
>>> s = rng.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-Generator-dirichlet-1.png