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

简介

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#

  • 14
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 拉丁立方采样是一种采样方法,可以在实验设计和参数优化等方面广泛应用。这种采样方法可以使得采样点更加均匀地分布在整个采样空间中,从而避免了传统随机采样的缺点。 MATLAB 是一个用于数值计算和科学计算的软件,其中也包括了拉丁立方采样的工具箱。在 MATLAB 中使用拉丁立方采样需要经过以下步骤: 1.准备好采样所需的参数,包括采样点数目、采样维数和采样范围等。 2.在 MATLAB 中使用已经准备好的参数生成拉丁立方样本集合。 3.对生成的样本进行分析和处理,获取需要的信息。 4.根据分析结果加以调整和修改,重新生成样本集合。 需要注意的是,在使用 MATLAB 进行拉丁立方采样时,可以根据自己的需要进行调整和修改,使得采样结果更加符合实际需求。同时,也需要注意对采样数据的存储和管理,以便于后续的处理和分析。 ### 回答2: 拉丁立方采样是一种用于确定模型参数不确定性和灵敏度分析的采样技术,常用于工程、科学和经济学等领域。MATLAB是一种常用的科学计算软件,提供了许多工具和函数用于数据分析和统计学习。在MATLAB中,使用拉丁立方采样可以通过使用LatinHypercube和sobolset函数来实现。 拉丁立方采样是一种非随机的采样技术,它产生的采样点在各维度上均匀分布,并且在各维度上的采样点之间互不相关。为了生成拉丁立方采样点,需要对每个维度生成随机排列,并将每个排列中的每个元素除以该维度的总采样数,然后再将其加上一个随机偏移量。这个偏移量是从[0,1]之间的均匀分布随机采样得到的。 在MATLAB中,可以使用LatinHypercube函数生成拉丁立方采样点。LatinHypercube函数的输入为采样点个数和维度数。例如,要生成100个三维拉丁立方采样点,可以使用以下代码: X = LatinHypercube(100,3); 在MATLAB中,也可以使用sobolset函数生成采样点。Sobol序列是一组高维序列,具有良好的分散性和可重复性,适用于高维参数空间采样。sobolset函数的输入为采样点个数和维度数。例如,要生成100个三维Sobol采样点,可以使用以下代码: p = sobolset(3); X = net(p,100); 无论使用拉丁立方采样还是Sobol采样,都可以通过将生成的采样点作为模型的观测数据,来研究模型的参数不确定性和灵敏度分析。这些采样点可以用于构建响应曲面和敏感性分析,也可以用于不确定性量化和优化设计。MATLAB提供了许多工具和函数用于数据分析和统计学习,使得这些分析和优化过程变得更加简单和高效。 ### 回答3: 拉丁立方采样是一种常用的多维随机采样方法,常被应用于模拟仿真、数值计算、优化设计等领域。而MATLAB则是一种著名的科学计算软件,它在数据处理、算法实现、图形绘制等方面具有很强的功能。 在MATLAB中,实现拉丁立方采样可以通过使用内置函数lhsdesign实现。lhsdesign函数的主要作用是根据用户设定的样本数目和样本维度,产生符合拉丁立方采样规则的样本点集。 具体实现方法如下: 1. 定义样本数目和样本维度 我们假设需要生成10个三维样本点,代码如下: samples = 10; dimensions = 3; 2. 调用lhsdesign函数生成样本点 我们可以调用lhsdesign函数来生成符合拉丁立方采样规则的样本点集。 points = lhsdesign(samples,dimensions); 3. 可视化样本点 将生成的样本点可视化,有助于我们对采样结果的观察和分析。我们仍以上述三维样本点为例,将其可视化代码为: scatter3(points(:,1),points(:,2),points(:,3),'filled'); 运行上述代码后可以看到生成的10个样本点位于三维空间中。 除了lhsdesign函数,MATLAB中还有许多其他的随机采样函数,如rand、randn、sobolset等等,使用不同函数所得到的采样结果也不尽相同,因此在具体应用中需要根据实际情况选择合适的函数。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值