scipy.stats.qmc.LatinHypercube

class scipy.stats.qmc.LatinHypercube(d, *, centered=False, strength=1, optimization=None, seed=None)[源代码]

拉丁超立方体抽样(LHS)。

拉丁超立方体样本 [1] 生成 \(n\) 点进 \([0,1)^{{d}}\) 。每个单变量边缘分布都是分层的,在 \([j/n, (j+1)/n)\)\(j=0,1,...,n-1\) 。在下列情况下,它们仍然适用 \(n << d\)

参数
d集成

参数空间的维度。

centered布尔值,可选

将点在多维栅格内居中。默认值为False。

optimization{无,“随机光盘”},可选

是否使用优化方案构建LHS。默认值为None。

  • random-cd :随机排列坐标以降低中心偏差 [5]. 基于中心差异的最佳设计会不断更新。与使用其他差异度量相比,基于中心差异的设计对2D和3D子投影显示出更好的空间填充稳健性 [6].

1.8.0 新版功能.

strength{1,2},可选

LHS的实力。 strength=1 产生一个普通的lhs,而 strength=2 生成基于强度为2的LHS的正交表 [7], [8]. 在这种情况下,只有 n=p**2 可以通过以下方式采样点 p 质数。它还限制了 d <= p + 1 。默认值为1。

1.8.0 新版功能.

seed :{无,整型, numpy.random.Generator },可选{无,整型,

如果 seed 是不是没有 numpy.random.Generator 使用的是Singleton。如果 seed 是一个整型、一个新的 Generator 实例,其种子设定为 seed 。如果 seed 已经是一个 Generator 实例,则使用该实例。

注意事项

当LHS用于集成函数时 \(f\) 完毕 \(n\) ,lhs对几乎是加法的被积函数非常有效。 [2]. LHS为 \(n\) 点,则积分的方差始终小于平面MC \(n-1\) 积分 [3]. LHS关于积分的均值和方差存在一个中心极限定理 [4], 但由于随机化而不一定用于优化的LHS。

\(A\) 被称为强度的正交排列 \(t\) 如果在每个n行乘t列子矩阵中 \(A\) :全部 \(p^t\) 可能的不同行出现的次数相同。的要素 \(A\) 都在集合中 \(\{{0, 1, ..., p-1\}}\) ,也称为符号。它的约束条件是 \(p\) 必须是素数才能进行模运算。

强度1(普通LHS)比强度0(MC)更有优势,强度2比强度1是一个有用的增量。强度3的增量较小,加扰的QMC(如Sobol‘,Halton)性能更好 [7].

要创建强度为2的LHS,正交数组 \(A\) 通过将符号集的随机双射映射应用于其自身来随机化。例如,在列0中,全0可能变为2;在列1中,全0可能变为1,依此类推。然后,对于每一列 \(i\) 和符号 \(j\) ,我们添加一个普通的、一维大小的LHS \(p\) 到子数组,在该子数组中 \(A^i = j\) 。最终得到的矩阵除以 \(p\)

参考文献

1

McKay等人,“在计算机代码的输出分析中选择输入变量值的三种方法的比较”。技术计量学,1979年。

2

使用拉丁超立方体抽样的模拟的大样本特性。“技术计量学”第29期,第2期:143-151,1987。

3

A·B·欧文,“加扰网正交的蒙特卡罗方差”。暹罗数值分析学报34,第5期:1884-1910,1997

4

Loh,W.-L。“关于拉丁超立方体抽样。”“统计年鉴”第24卷第5期:2058-2080,1996。

5

方等人的研究成果。“计算机实验的设计与建模”。“计算机科学与数据分析系列”,2006。

6

Damblin等人,“空间填充设计的数值研究:拉丁超立方体样本和次投影性质的优化”。“仿真杂志”,2013。

7(1,2)

A·B·欧文,“用于计算机实验、集成和可视化的正交表”。统计学报,1992。

8

B.唐,“基于正交表的拉丁超立方体”。“美国统计协会杂志”,1993年。

示例

从拉丁语超立方体生成器生成样本。

>>> from scipy.stats import qmc
>>> sampler = qmc.LatinHypercube(d=2)
>>> sample = sampler.random(n=5)
>>> sample
array([[0.1545328 , 0.53664833],  # random
       [0.84052691, 0.06474907],
       [0.52177809, 0.93343721],
       [0.68033825, 0.36265316],
       [0.26544879, 0.61163943]])

使用差异标准计算样本质量。

>>> qmc.discrepancy(sample)
0.0196...  # random

可以根据边界缩放采样。

>>> l_bounds = [0, 2]
>>> u_bounds = [10, 5]
>>> qmc.scale(sample, l_bounds, u_bounds)
array([[1.54532796, 3.609945  ],  # random
       [8.40526909, 2.1942472 ],
       [5.2177809 , 4.80031164],
       [6.80338249, 3.08795949],
       [2.65448791, 3.83491828]])

使用 optimization 关键字参数生成具有较低差异且计算成本较高的LHS。

>>> sampler = qmc.LatinHypercube(d=2, optimization="random-cd")
>>> sample = sampler.random(n=5)
>>> qmc.discrepancy(sample)
0.0176...  # random

使用 strength 关键字参数以生成强度为2的基于正交数组的LHS。在这种情况下,采样点的数量必须是质数的平方。

>>> sampler = qmc.LatinHypercube(d=2, strength=2)
>>> sample = sampler.random(n=9)
>>> qmc.discrepancy(sample)
0.00526...  # random

可以组合选项以产生基于LHS的优化中心正交阵列。优化后的结果不能保证强度为2。

方法:

fast_forward \(n)

通过以下方式快进序列 n 位置。

random \([n] )

n 在半开间隔内 [0, 1)

reset \()

将引擎重置为基本状态。