测试实用工具¶
拟合优度测试¶
此模块实现了拟合优度测试,用于检查分布的 .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 值。
- 返回类型
- unif01_goodness_of_fit(samples, *, plot=False)[source]¶
将均匀分布的样本分箱并应用皮尔逊卡方检验。
- 参数
samples (torch.Tensor) – 来自候选分布的实值样本向量,该分布应服从 Uniform(0, 1) 分布。
plot (bool) – 是否打印直方图。默认为 False。
- 返回值
拟合优度,表示为一个 p 值。
- 返回类型
- exp_goodness_of_fit(samples, plot=False)[source]¶
将指数分布样本转换为 Uniform(0,1) 分布,并通过分箱皮尔逊卡方检验评估拟合优度。
- 参数
samples (torch.Tensor) – 来自候选分布的实值样本向量,该分布应服从 Exponential(1) 分布。
plot (bool) – 是否打印直方图。默认为 False。
- 返回值
拟合优度,表示为一个 p 值。
- 返回类型
- density_goodness_of_fit(samples, probs, plot=False)[source]¶
将任意连续样本转换为 Uniform(0,1) 分布,并通过分箱皮尔逊卡方检验评估拟合优度。
- 参数
samples (torch.Tensor) – 来自分布的实值样本列表。
probs (torch.Tensor) – 在这些样本处评估的概率密度向量。
plot (bool) – 是否打印直方图。默认为 False。
- 返回值
拟合优度,表示为一个 p 值。
- 返回类型
- 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 值。
- 返回类型
- 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。