当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy FastGeneratorInversion.evaluate_error用法及代码示例


本文简要介绍 python 语言中scipy.stats.sampling.FastGeneratorInversion.evaluate_error的用法。

用法:

FastGeneratorInversion.evaluate_error(size=100000, random_state=None, x_error=False)#

评估反演的数值精度(u- 和x-error)。

参数

size 整数,可选

估计误差的随机点的数量。默认为 100000

random_state {无,整数, numpy.random.Generator

NumPy 随机数生成器或底层 NumPy 随机数生成器的种子,用于生成均匀随机数流。如果 random_state 为 None,则使用 self.random_state 。如果 random_state 是 int,则使用np.random.default_rng(random_state)。如果 random_state 已经是GeneratorRandomState 实例,则使用该实例。

返回

u_error, x_error 浮点数元组

随机变量的 NumPy 数组。

注意

逆 CDF 的数值精度ppf由u-error控制。其计算方法如下:max |u - CDF(PPF(u))|取最大值的地方尺寸区间 [0,1] 中的随机点。random_state确定随机样本。请注意,如果ppf准确地说,u-error 将为零。

x-error 测量精确的 PPF 和 ppf 之间的直接距离。如果 x_error 设置为 True`, it is computed as the maximum of the minimum of the relative and absolute x-error: ``max(min(x_error_abs[i], x_error_rel[i])),其中 x_error_abs[i] = |PPF(u[i]) - PPF_fast(u[i])|x_error_rel[i] = max |(PPF(u[i]) - PPF_fast(u[i])) / PPF(u[i])| 。请注意,在 PPF(u) 接近零或非常大的情况下,考虑相对 x-error 非常重要。

默认情况下,仅评估 u-error 并将 x-error 设置为 np.nan 。请注意,如果 PPF 的实现很慢,x-error 的评估将会非常慢。

有关这些误差测量的更多信息可以在 [1] 中找到。

参考

[1]

德弗林格、格哈德、沃尔夫冈·霍曼和约瑟夫·莱多德。 “当仅知道密度时,通过数值反演生成随机变量。” ACM 建模和计算机仿真汇刊 (TOMACS) 20.4 (2010):1-25。

例子

>>> import numpy as np
>>> from scipy import stats
>>> from scipy.stats.sampling import FastGeneratorInversion

创建正态分布的对象:

>>> d_norm_frozen = stats.norm()
>>> d_norm = FastGeneratorInversion(d_norm_frozen)

为了确认数值反演的准确性,我们评估近似误差(u-error 和 x-error)。

>>> u_error, x_error = d_norm.evaluate_error(x_error=True)

u-error 应低于 1e-10:

>>> u_error
8.785783212061915e-11  # may vary

将 PPF 与近似值 ppf 进行比较:

>>> q = [0.001, 0.2, 0.4, 0.6, 0.8, 0.999]
>>> diff = np.abs(d_norm_frozen.ppf(q) - d_norm.ppf(q))
>>> x_error_abs = np.max(diff)
>>> x_error_abs
1.2937954707581412e-08

这是在 q 点评估的绝对x-error。相对误差由下式给出

>>> x_error_rel = np.max(diff / np.abs(d_norm_frozen.ppf(q)))
>>> x_error_rel
4.186725600453555e-09

上面计算的 x_error 是以非常相似的方式在更大的随机值 q 集合上导出的。在每个值 q[i] 处,取相对误差和绝对误差的最小值。然后得出最终值作为这些值的最大值。在我们的示例中,我们得到以下值:

>>> x_error
4.507068014335139e-07  # may vary

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.stats.sampling.FastGeneratorInversion.evaluate_error。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。