numpy.random.RandomState.dirichlet#

方法

random.RandomState.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,“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