测试工具

拟合优度检验

该模块实现了拟合优度测试,用于检查分布之间的.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

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

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

  • total_count (int) – 如果数据被截断,则为可选的总计数,否则为None。

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

Returns

截断多项式样本的p值。

Return type

float

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

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

Parameters
  • 样本 (torch.Tensor) – 来自候选分布的实值样本向量,该分布应为均匀分布(0, 1)。

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

Returns

拟合优度,作为p值。

Return type

float

exp_goodness_of_fit(samples, plot=False)[source]

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

Parameters
  • 样本 (torch.Tensor) – 来自候选分布的实值样本向量,该分布应为指数分布(1)。

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

Returns

拟合优度,作为p值。

Return type

float

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

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

Parameters
  • 样本 (torch.Tensor) – 来自分布的实值样本的向量列表。

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

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

Returns

拟合优度,作为p值。

Return type

float

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

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

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

“最近邻距离函数的和、矩界、极限定理和拟合优度检验” https://projecteuclid.org/download/pdf_1/euclid.aop/1176993668

[2] Mike Williams (2010)

“你的拟合有多好?高能物理中的无分箱多变量拟合优度检验。” https://arxiv.org/abs/1006.3019

[3] Nearest Neighbour Distribution

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

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

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

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

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

Returns

拟合优度,作为p值。

Return type

float

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

在样本维度上进行分发,并委托给 density_goodness_of_fit()vector_density_goodness_of_fit()

Parameters
  • 样本 (torch.Tensor) – 一个在最左侧维度上堆叠的样本张量。

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

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

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