logcdf#
- Mixture.logcdf(x, y=None, /, *, method=None)[原始碼]#
累積分布函數的對數
累積分布函數 (“CDF”),表示為 \(F(x)\),是隨機變數 \(X\) 將假定小於或等於 \(x\) 值的機率
\[F(x) = P(X ≤ x)\]此函數的雙參數變體也定義為隨機變數 \(X\) 將假定介於 \(x\) 和 \(y\) 之間的值的機率。
\[F(x, y) = P(x ≤ X ≤ y)\]logcdf
計算累積分布函數 (“log-CDF”) 的對數,\(\log(F(x))\)/\(\log(F(x, y))\),但與樸素實作(計算 CDF 並取對數)相比,它在數值上可能更有利。logcdf
接受 x 作為 \(x\),y 作為 \(y\)。- 參數:
- x, yarray_like
log-CDF 的引數。x 為必填;y 為選填。
- method{None, ‘formula’, ‘logexp’, ‘complement’, ‘quadrature’, ‘subtraction’}
用於評估 log-CDF 的策略。預設 (
None
),函數的單一引數形式在以下選項之間選擇,依優先順序排列。'formula'
:使用 log-CDF 本身的公式'logexp'
:評估 CDF 並取對數'complement'
:評估 log-CCDF 並取對數補數(請參閱「注意事項」)'quadrature'
:以數值方式對 log-PDF 進行對數積分
雙引數形式接受
'complement'
的替代方案'subtraction'
:計算每個引數的 log-CDF 並取對數差(請參閱「注意事項」)
並非所有分布都提供所有 method 選項。如果選取的 method 不可用,則會引發
NotImplementedError
。
- 傳回:
- outarray
在提供的引數評估的 log-CDF。
注意事項
假設連續機率分布具有支持度 \([l, r]\)。對於 \(x ≤ l\),log-CDF 評估為其最小值 \(\log(0) = -\infty\),對於 \(x ≥ r\),log-CDF 評估為其最大值 \(\log(1) = 0\)。
對於具有無限支持度的分布,當引數在理論上位於支持度內時,
cdf
通常會傳回值0
;發生這種情況的原因可能是 CDF 的真實值太小,無法以選取的 dtype 表示。logcdf
但是,通常會在更大的域中傳回有限(非-inf
)結果。同樣地,logcdf
可能會提供嚴格的負數結果,其引數為cdf
將傳回1.0
的引數。因此,為了避免浮點數的下溢和相關限制,可能最好使用機率的對數。數字 \(z\) 的「對數補數」在數學上等效於 \(\log(1-\exp(z))\),但其計算是為了避免在 \(\exp(z)\) 接近 \(0\) 或 \(1\) 時損失精確度。同樣地,此處使用術語 \(w\) 和 \(z\) 的「對數差」來表示 \(\log(\exp(w)-\exp(z))\)。
如果
y < x
,則 CDF 為負數,因此 log-CCDF 是具有虛部 \(\pi\) 的複數。為了保持一致性,當提供 y 時,此函數的結果始終具有複數 dtype,而與虛部的數值無關。參考文獻
[1]累積分布函數,維基百科,https://en.wikipedia.org/wiki/Cumulative_distribution_function
範例
使用所需的參數實例化分布
>>> import numpy as np >>> from scipy import stats >>> X = stats.Uniform(a=-0.5, b=0.5)
在所需的引數評估 log-CDF
>>> X.logcdf(0.25) -0.287682072451781 >>> np.allclose(X.logcdf(0.), np.log(X.cdf(0.))) True