logcdf#
- Mixture.logcdf(x, y=None, /, *, method=None)[source]#
累积分布函数的对数
累积分布函数(“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 进行对数积分(或者,在离散情况下,对 log-PMF 进行对数求和)
代替
'complement'
,双参数形式接受'subtraction'
:计算每个参数的 log-CDF 并取对数差(参见注释)
并非所有分布都提供所有 method 选项。 如果所选 method 不可用,则会引发
NotImplementedError
。
- 返回值:
- out数组
在提供的参数处评估的 log-CDF。
注释
假设连续概率分布支持 \([l, r]\)。 log-CDF 评估为其最小值 \(\log(0) = -\infty\)(对于 \(x ≤ l\))及其最大值 \(\log(1) = 0\)(对于 \(x ≥ r\))。 可以对离散分布做出类似的声明,但控制最小值的等式是严格的。
对于具有无限支持的分布,当参数在理论上位于支持范围内时,
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