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
(預設值),則如果n
和p
都是純量,則會傳回單一值。否則,會抽取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)