numpy.random.dirichlet#

random.dirichlet(alpha, size=None)#

從 Dirichlet 分佈中抽取樣本。

從 Dirichlet 分佈中抽取維度 k 的 size 個樣本。Dirichlet 分佈隨機變數可以看作是 Beta 分佈的多變數概括。Dirichlet 分佈是貝氏推論中多項式分佈的共軛先驗分佈。

注意

新程式碼應使用 dirichlet 方法,此方法屬於 Generator 實例;請參閱快速入門

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

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

size整數或整數元組,選用

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

傳回值:
samplesndarray,

抽取的樣本,形狀為 (size, k)

引發:
ValueError

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

另請參閱

random.Generator.dirichlet

新程式碼應使用此方法。

註解

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\) 為一個隨機向量,其組件遵循標準 gamma 分佈,則 \(X = \frac{1}{\sum_{i=1}^k{Y_i}} Y\) 為 Dirichlet 分佈

參考文獻

[1]

David McKay,“資訊理論、推論與學習演算法”,第 23 章,https://www.inference.org.uk/mackay/itila/

[2]

維基百科,“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-dirichlet-1.png