ilogcdf#
- Normal.ilogcdf(logp, /, *, method=None)[source]#
累積分布函數對數的反函數。
累積分布函數對數(“inverse log-CDF”)的反函數是引數 \(x\),對於此引數,累積分布函數 \(\log(F(x))\) 的對數值會等於 \(\log(p)\)。
在數學上,它等價於 \(F^{-1}(\exp(y))\),其中 \(y = \log(p)\),但與樸素的實作方式(計算 \(p = \exp(y)\),然後 \(F^{-1}(p)\))相比,它在數值上可能更具優勢。
ilogcdf
接受 logp ,其中 \(\log(p) ≤ 0\)。- 參數:
- logparray_like
inverse log-CDF 的引數。
- method{None, ‘formula’, ‘complement’, ‘inversion’}
用於評估 inverse log-CDF 的策略。預設情況下 (
None
),基礎架構會從以下選項中選擇,並依優先順序排列。'formula'
:使用 inverse log-CDF 本身的公式'complement'
:在 logp 的對數互補處評估 inverse log-CCDF(請參閱「Notes」章節)'inversion'
:以數值方式求解 log-CDF 等於 logp 的引數
並非所有 method 選項都適用於所有分布。如果選定的 method 不可用,則會引發
NotImplementedError
。
- 返回:
- outarray
在提供的引數處評估的 inverse log-CDF。
說明
假設連續機率分布具有 support \([l, r]\)。inverse log-CDF 在 \(\log(p) = \log(0) = -\infty\) 時返回其最小值 \(l\),在 \(\log(p) = \log(1) = 0\) 時返回其最大值 \(r\)。由於 log-CDF 的範圍為 \([-\infty, 0]\),因此 inverse log-CDF 僅在負實數上定義;對於 \(\log(p) > 0\),
ilogcdf
返回nan
。有時,需要找到 CDF 的引數,以使結果機率非常接近
0
或1
- 太接近而無法以浮點算術精確表示。然而,在許多情況下,結果機率的對數可以用浮點算術表示,在這種情況下,可以使用此函數來找到 CDF 的引數,以使結果機率的對數為 \(y = \log(p)\)。數字 \(z\) 的「對數互補」在數學上等價於 \(\log(1-\exp(z))\),但計算它是為了避免在 \(\exp(z)\) 接近
0
或1
時損失精度。範例
使用所需的參數實例化分布
>>> import numpy as np >>> from scipy import stats >>> X = stats.Uniform(a=-0.5, b=0.5)
在所需的引數處評估 inverse log-CDF
>>> X.ilogcdf(-0.25) 0.2788007830714034 >>> np.allclose(X.ilogcdf(-0.25), X.icdf(np.exp(-0.25))) True