scipy.stats.qmc.

差异#

scipy.stats.qmc.discrepancy(sample, *, iterative=False, method='CD', workers=1)[source]#

给定样本的差异。

参数:
samplearray_like (n, d)

要计算差异的样本。

iterativebool, 可选

如果不用于更新差异,则必须为 False。默认值为 False。有关更多详细信息,请参阅注释。

methodstr, 可选

差异类型,可以是 CDWDMDL2-star。有关更多详细信息,请参阅注释。默认值为 CD

workersint, 可选

用于并行处理的 worker 数。如果给出 -1,则使用所有 CPU 线程。默认值为 1。

返回值:
discrepancyfloat

差异。

另请参阅

geometric_discrepancy

注释

差异是用于评估超立方体中多个样本的空间填充的均匀性标准。差异量化了超立方体上的连续均匀分布和 \(n\) 个不同样本点上的离散均匀分布之间的距离。

值越低,参数空间的覆盖率越好。

对于超立方体的子集集合,差异是子集中样本点的分数与子集的体积之间的差。对应于不同子集集合,差异有不同的定义。某些版本对子集取均方根差,而不是最大值。

如果均匀性度量满足以下标准 [1],则它是合理的

  1. 它在排列因子和/或运行时保持不变。

  2. 它在坐标旋转时保持不变。

  3. 它不仅可以测量样本在超立方体上的均匀性,还可以测量样本在非空低维超立方体子集上的投影均匀性。

  4. 它具有一定的几何意义。

  5. 它易于计算。

  6. 它满足类似于 Koksma-Hlawka 的不等式。

  7. 它与实验设计中的其他标准一致。

有四种方法可用

  • CD: 中心差异 - 子空间涉及超立方体的角点

  • WD: 环绕差异 - 子空间可以围绕边界环绕

  • MD: 混合差异 - CD/WD 之间的混合,涵盖更多标准

  • L2-star: L2-星形差异 - 类似于 CD,但对旋转有变体

请参阅 [2],了解每种方法的精确定义。

最后,使用 iterative=True,可以像有 \(n+1\) 个样本一样计算差异。如果我们想要将一个点添加到采样并检查会给出最低差异的候选点,这将很有用。然后,您可以使用 update_discrepancy 对每个候选点更新差异。此方法比对大量候选点计算差异更快。

参考文献

[1]

Fang 等人。“计算机实验的设计和建模”。计算机科学与数据分析系列,2006 年。

[2]

周 Y.-D. 等人。“拟随机点集的混合差异”。复杂性杂志,29 (3-4),第 283-301 页,2013 年。

[3]

T. T. Warnock。“低差异点集的计算研究”。数论在数值分析中的应用,学术出版社,第 319-343 页,1972 年。

示例

使用差异计算样本的质量

>>> import numpy as np
>>> from scipy.stats import qmc
>>> space = np.array([[1, 3], [2, 6], [3, 2], [4, 5], [5, 1], [6, 4]])
>>> l_bounds = [0.5, 0.5]
>>> u_bounds = [6.5, 6.5]
>>> space = qmc.scale(space, l_bounds, u_bounds, reverse=True)
>>> space
array([[0.08333333, 0.41666667],
       [0.25      , 0.91666667],
       [0.41666667, 0.25      ],
       [0.58333333, 0.75      ],
       [0.75      , 0.08333333],
       [0.91666667, 0.58333333]])
>>> qmc.discrepancy(space)
0.008142039609053464

我们也可以使用 iterative=True 迭代地计算 CD 差异。

>>> disc_init = qmc.discrepancy(space[:-1], iterative=True)
>>> disc_init
0.04769081147119336
>>> qmc.update_discrepancy(space[-1], space[:-1], disc_init)
0.008142039609053513