numpy.random.Generator.negative_binomial#

方法

random.Generator.negative_binomial(n, p, size=None)#

從負二項式分佈中抽取樣本。

樣本是從具有指定參數的負二項式分佈中抽取的,其中 n 為成功次數,p 為成功機率,且 n > 0,p 在區間 (0, 1] 內。

參數:
n浮點數或浮點數的類陣列 (array_like)

分佈的參數,> 0。

p浮點數或浮點數的類陣列 (array_like)

分佈的參數。必須滿足 0 < p <= 1。

size整數或整數元組,可選

輸出形狀。如果給定的形狀是例如 (m, n, k),則會抽取 m * n * k 個樣本。如果 size 為 None (預設值),則如果 np 都是純量,則會傳回單一值。否則,會抽取 np.broadcast(n, p).size 個樣本。

傳回值:
outndarray 或純量

從參數化的負二項式分佈中抽取的樣本,其中每個樣本等於 N,即在達到總共 n 次成功之前發生的失敗次數。

註解

負二項式分佈的機率質量函數為

\[P(N;n,p) = \frac{\Gamma(N+n)}{N!\Gamma(n)}p^{n}(1-p)^{N},\]

其中 \(n\) 是成功次數,\(p\) 是成功機率,\(N+n\) 是試驗次數,而 \(\Gamma\) 是伽瑪函數。當 \(n\) 是整數時,\(\frac{\Gamma(N+n)}{N!\Gamma(n)} = \binom{N+n-1}{N}\),這是 pmf 中此項更常見的形式。負二項式分佈給出了在最後一次試驗成功的情況下,給定 n 次成功時,N 次失敗的機率。

如果一個人重複擲骰子,直到第三次出現“1”,那麼在第三次“1”出現之前出現的非“1”的數量的機率分佈是負二項式分佈。

由於此方法在內部使用中介隨機值呼叫 Generator.poisson,因此當選擇 \(n\)\(p\) 會導致採樣的中介分佈的平均值 + 10 個標準差超過 Generator.poisson 方法的最大可接受值時,會引發 ValueError。當 \(p\) 太低(每次成功發生很多失敗)且 \(n\) 太大(允許很多成功)時,就會發生這種情況。因此,\(n\)\(p\) 值必須滿足以下約束

\[n\frac{1-p}{p}+10n\sqrt{n}\frac{1-p}{p}<2^{63}-1-10\sqrt{2^{63}-1},\]

其中方程式的左側是從伽瑪分佈中採樣的樣本的導出平均值 + 10 個標準差,該伽瑪分佈在內部用作泊松樣本的 \(lam\) 參數,而方程式的右側是 Generator.poisson\(lam\) 最大值的約束。

參考文獻

[1]

Weisstein, Eric W. “負二項式分佈。” 來自 MathWorld–Wolfram Web 資源。https://mathworld.wolfram.com/NegativeBinomialDistribution.html

[2]

Wikipedia,“負二項式分佈”,https://en.wikipedia.org/wiki/Negative_binomial_distribution

範例

從分佈中抽取樣本

真實世界的範例。一家公司鑽探野貓式石油探勘井,每口井的估計成功機率為 0.1。對於每口連續的井,獲得一次成功的機率是多少?也就是說,在鑽探 5 口井後、6 口井後等等,獲得單次成功的機率是多少?

>>> rng = np.random.default_rng()
>>> s = rng.negative_binomial(1, 0.1, 100000)
>>> for i in range(1, 11): 
...    probability = sum(s<i) / 100000.
...    print(i, "wells drilled, probability of one success =", probability)