The gaussian_kde
函数于scipy.stats
有一个功能evaluate
可以返回输入点的 PDF 值。我正在尝试使用gaussian_kde
估计逆 CDF。其动机是生成一些输入数据的蒙特卡罗实现,这些数据的统计分布是使用 KDE 进行数值估计的。有没有绑定的方法gaussian_kde
可以达到这个目的吗?
下面的示例显示了这对于高斯分布的情况如何工作。首先,我展示如何进行 PDF 计算来设置我想要实现的特定 API:
import numpy as np
from scipy.stats import norm, gaussian_kde
npts_kde = int(5e3)
n = np.random.normal(loc=0, scale=1, size=npts_kde)
kde = gaussian_kde(n)
npts_sample = int(1e3)
x = np.linspace(-3, 3, npts_sample)
kde_pdf = kde.evaluate(x)
norm_pdf = norm.pdf(x)
![Demo of KDE approximation of the PDF of a normal distribution](https://i.stack.imgur.com/6w1Av.jpg)
是否有一种类似简单的方法来计算逆 CDF?这norm
功能非常方便isf
正是执行此操作的函数:
cdf_value = np.sort(np.random.rand(npts_sample))
cdf_inv = norm.isf(1 - cdf_value)
![Demo of desired KDE approximation of the CDF of a normal distribution](https://i.stack.imgur.com/CKhf7.jpg)
是否存在这样的功能kde_gaussian
?或者从已经实现的方法构造这样的函数是否简单?
方法integrate_box_1d可用于计算 CDF,但它不是矢量化的;你需要循环点。如果内存不是问题,重写它源代码(这本质上只是一个调用special.ndtr)矢量形式可能会加快速度。
from scipy.special import ndtr
stdev = np.sqrt(kde.covariance)[0, 0]
pde_cdf = ndtr(np.subtract.outer(x, n)).mean(axis=1)
plot(x, pde_cdf)
反函数的绘图将是plot(pde_cdf, x)
。如果目标是计算特定点的反函数,请考虑使用插值样条的逆,对 CDF 的计算值进行插值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)