差异性#
- scipy.stats.qmc.discrepancy(sample, *, iterative=False, method='CD', workers=1)[源代码]#
给定样本的差异性。
- 参数:
- sample类似数组 (n, d)
用于计算差异性的样本。
- iterativebool,可选
如果不是用于更新差异性,则必须为 False。默认为 False。有关更多详细信息,请参阅注释。
- methodstr,可选
差异性的类型,可以是
CD
、WD
、MD
或L2-star
。有关更多详细信息,请参阅注释。默认为CD
。- workersint,可选
用于并行处理的工作线程数。如果给定 -1,则使用所有 CPU 线程。默认为 1。
- 返回:
- discrepancyfloat
差异性。
注释
差异性是一种均匀性标准,用于评估超立方体中多个样本的空间填充。差异性量化了超立方体上连续均匀分布与\(n\)个不同样本点的离散均匀分布之间的距离。
值越低,参数空间的覆盖率越好。
对于超立方体的子集集合,差异性是一个子集中的样本点比例与该子集的体积之间的差异。存在与不同的子集集合相对应的差异性定义。某些版本采用子集上的均方根差,而不是最大值。
如果满足以下标准,则均匀性度量是合理的[1]
它在置换因子和/或运行的情况下是不变的。
它在坐标旋转的情况下是不变的。
它不仅可以测量样本在超立方体上的均匀性,还可以测量样本在较低维度超立方体的非空子集上的投影均匀性。
它具有一定的合理几何意义。
它易于计算。
它满足类似于 Koksma-Hlawka 的不等式。
它与实验设计中的其他标准一致。
有四种方法可用
CD
:中心差异性 - 子空间涉及超立方体的一个角WD
:环绕差异性 - 子空间可以环绕边界MD
:混合差异性 - CD/WD 之间的混合,涵盖更多标准L2-star
:L2-star 差异性 - 类似于 CD,但旋转的变体
有关每种方法的精确定义,请参见 [2]。
最后,使用
iterative=True
,可以计算差异性,就好像我们有 \(n+1\) 个样本一样。如果我们想向采样中添加一个点并检查哪个候选点会给出最低的差异性,这将非常有用。然后,您可以仅使用update_discrepancy
更新每个候选点的差异性。这种方法比计算大量候选点的差异性要快。参考文献
[1]Fang et al. “计算机实验的设计与建模”。计算机科学与数据分析系列,2006 年。
[2]Zhou Y.-D. et al. “准随机点集的混合差异性。” 复杂性杂志,29 (3-4) , pp. 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