【采样算法】拉丁超立方采样

【采样算法】拉丁超立方采样

  • 简介
  • 过程
    • 一维拉丁超立方采样
    • 多维拉丁超立方采样
  • python编程
  • 结论
  • 参考

简介

LHS(Latin Hypercube Sampling)是一种分层采样方法,相较于蒙特卡洛采样,减少了迭代次数。其背后的概念并不复杂,即采用均匀采样的方法对变量进行采样,然后将这些变量的随机组合集用于目标函数的一次计算。先分区再在每个分区内均匀采样可以使采集的样本均匀分布在整个待抽样区域。

过程

一维拉丁超立方采样

一维拉丁超立方体抽样将累积密度函数(cdf)分成n个相等的分区,然后在每个分区中选择一个随机的数据点。

例如,假设你需要一个包含100个数据点的随机样本。首先,将cdf分成100个等距分区。如果你的分布从0开始,以k结束,那么第一个数据点将在(0,k/100)之间的区间中选择,第二个数据点来自(k/100, 2k/100),第三个数据点来自(2k/100, 3k/100),依此类推。最后得到100个不同的数据点。

多维拉丁超立方采样

二维采样没有变得更加复杂,通常是用软件来执行的。假设你的两个变量x1和x2是独立的,你按照一维方法分别得到x1和x2的一维样本。一旦你有了两个样本列表,再将它们随机组合成二维的随机组合集。

对于n维拉丁超立方体采样,使用相同的方法。

python编程

from pyDOE import *

lhs(n, [samples, criterion, iterations])

其中

  • n代表因子数,即变量数,即维数。
  • samples代表对每个因子的采样数(默认值为n)
  • criterion代表在每个区间内的采样方式(默认为none,即在区间内简单随机采样)
    • “center”或“c”:将采样间隔内的点居中
    • “maximin” or “m”:最大化点与点之间的最小距离,但将点置于其区间内的随机位置
    • “centermaximin” or “cm”:与“maximin”相同,但在区间内居中
    • “correlation” or “corr”:最小化最大相关系数

输出设计为将所有变量的范围设定为[0,1],然后自行根据用户的需要进行转换。pyDOE2是仍在维护的pyDOE分支。它的一个改进是可以将一个随机的种子直接传递给lhs。

结论

拉丁超立方体抽样能够减少蒙特卡罗模拟所需的运行次数。一些模拟可能会减少50%的计算来创建一个平滑的输出分布。该过程快速、简单且易于实现。有些人认为现代计算机已经使LHS过时了,但它仍然被广泛使用。尽管它在分析上的差异不像在计算机系统运行缓慢的时候那么大,但它仍然可以在给定任何处理时间的情况下得到更精确的结果(就真正的可变性而言)。

参考

https://mathieu.fenniak.net/latin-hypercube-sampling/
https://www.statisticshowto.com/latin-hypercube-sampling/
https://pythonhosted.org/pyDOE/randomized.html
https://stackoverflow.com/questions/26137195/latin-hypercube-sampling-with-python/34924681#

你可能感兴趣的:(算法,算法,python)