测试实用工具

拟合优度测试

此模块实现了拟合优度测试,用于检查分布的 .sample().log_prob() 方法之间的一致性。主要函数返回一个拟合优度 p 值 gof,对于良好数据,该值应服从 Uniform(0,1) 分布,对于不良数据,该值应接近于零。要在测试中使用此返回值,请将全局变量 TEST_FAILURE_RATE 设置为小于您的测试套件中测试数量的 1/测试数量的值,然后在每个测试中断言 gof > TEST_FAILURE_RATE。例如

TEST_FAILURE_RATE = 1 / 20  # For 1 in 20 chance of spurious failure.

def test_my_distribution():
    d = MyDistribution()
    samples = d.sample([10000])
    probs = d.log_prob(samples).exp()
    gof = auto_goodness_of_fit(samples, probs)
    assert gof > TEST_FAILURE_RATE

此模块是 goftests 库的移植。

multinomial_goodness_of_fit(probs, counts, *, total_count=None, plot=False)[source]

皮尔逊卡方检验,可用于截断数据。https://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test

参数
  • probs (torch.Tensor) – 概率向量。

  • counts (torch.Tensor) – 计数向量。

  • total_count (int) – 可选的总计数,用于数据被截断的情况,否则为 None。

  • plot (bool) – 是否打印直方图。默认为 False。

返回值

截断多项分布样本的 p 值。

返回类型

float

unif01_goodness_of_fit(samples, *, plot=False)[source]

将均匀分布的样本分箱并应用皮尔逊卡方检验。

参数
  • samples (torch.Tensor) – 来自候选分布的实值样本向量,该分布应服从 Uniform(0, 1) 分布。

  • plot (bool) – 是否打印直方图。默认为 False。

返回值

拟合优度,表示为一个 p 值。

返回类型

float

exp_goodness_of_fit(samples, plot=False)[source]

将指数分布样本转换为 Uniform(0,1) 分布,并通过分箱皮尔逊卡方检验评估拟合优度。

参数
  • samples (torch.Tensor) – 来自候选分布的实值样本向量,该分布应服从 Exponential(1) 分布。

  • plot (bool) – 是否打印直方图。默认为 False。

返回值

拟合优度,表示为一个 p 值。

返回类型

float

density_goodness_of_fit(samples, probs, plot=False)[source]

将任意连续样本转换为 Uniform(0,1) 分布,并通过分箱皮尔逊卡方检验评估拟合优度。

参数
  • samples (torch.Tensor) – 来自分布的实值样本列表。

  • probs (torch.Tensor) – 在这些样本处评估的概率密度向量。

  • plot (bool) – 是否打印直方图。默认为 False。

返回值

拟合优度,表示为一个 p 值。

返回类型

float

vector_density_goodness_of_fit(samples, probs, *, dim=None, plot=False)[source]

通过最近邻分布 [1,2,3] 将任意多元连续样本转换为单变量 Uniform(0,1) 分布,并通过分箱皮尔逊卡方检验评估拟合优度。

[1] Peter J. Bickel 和 Leo Breiman (1983)

“Sums of Functions of Nearest Neighbor Distances, Moment Bounds, Limit Theorems and a Goodness of Fit Test” https://projecteuclid.org/download/pdf_1/euclid.aop/1176993668

[2] Mike Williams (2010)

“How good are your fits? Unbinned multivariate goodness-of-fit tests in high energy physics.” https://arxiv.org/abs/1006.3019

[3] 最近邻分布

https://en.wikipedia.org/wiki/Nearest_neighbour_distribution

参数
  • samples (torch.Tensor) – 来自分布的实向量值样本张量。

  • probs (torch.Tensor) – 在这些样本处评估的概率密度向量。

  • dim (int) – 数据所在子流形的可选维度。默认为 samples.shape[-1]

  • plot (bool) – 是否打印直方图。默认为 False。

返回值

拟合优度,表示为一个 p 值。

返回类型

float

auto_goodness_of_fit(samples, probs, *, dim=None, plot=False)[source]

根据样本维度分派,委托给 density_goodness_of_fit()vector_density_goodness_of_fit()

参数
  • samples (torch.Tensor) – 在最左维度上堆叠的样本张量。

  • probs (torch.Tensor) – 在这些样本处评估的概率向量。

  • dim (int) – 可选的流形维度,默认为 samples.shape[1:].numel()

  • plot (bool) – 是否打印直方图。默认为 False。