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。
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
\()将引擎重置为基本状态。