本文主要介绍了Matlab自带的两个拉丁超立方抽样的两个函数——lhsdesign函数、lhsnorm函数,拉丁超立方抽样的原理后面有时间写一篇文章介绍一下
lhsdesign函数
X = lhsdesign(n, p);
lhsdesign
函数是基本的拉丁超立方抽样的函数,总体的抽样结果服从均匀分布,返回一个
n
×
p
n \times p
n×p 的矩阵,每一列的元素是随机排列的。
- n n n — 样本空间的分层数,将0-1空间 n n n等分,得到 ( 0 , 1 / n ) , ( 1 / n , 2 / n ) , . . . , ( 1 − 1 / n , 1 ) (0,1/n), (1/n,2/n), ..., (1 - 1/n,1) (0,1/n),(1/n,2/n),...,(1−1/n,1);同时 n n n也是抽取的样本个数
- p p p — 样本维度数
实际上可以看出,lhsdesign(n,1)
已经完成了一轮一维分层抽样,这一过程实际上就是最基本的拉丁超立方抽样的过程了。如果仅仅想进行拉丁超立方抽样,现在已经实现了。
注意到顺序是乱序的。
lhsnorm函数
lhsnorm
函数是使总体抽样结果服从正态分布的拉丁超立方抽样函数。可以通过修改参数让不同的维度服从不同的分布。假设向量mu的长度为
p
p
p,则返回
n
×
p
n \times p
n×p维矩阵。
X = lhsnorm(mu, sigma, n);
- mu( μ μ μ)、sigma( σ σ σ) — 显然,这俩参数是正态分布的参数。mu是一个 p × 1 p \times 1 p×1向量,sigma是一个与mu对应的 p × p p \times p p×p对角阵。共定义了 p p p个正态分布, p p p个维度各自对应一个分布。
- n n n — 同lhsdesign函数中n的含义
有同学可能会问:我靠不对啊,我从其它地方看到的资料都是说拉丁超立方抽样函数都是服从均匀分布的啊,这里怎么又说服从正态分布了??这个问题的解释涉及到一些采样空间、样本空间等别的概念,先按下不表。后面有时间写一下我对拉丁超立方采样的理解。
程序演示
这里只演示一下lhsnorm
函数的效果,进行一次二维的服从正态分布的拉丁超立方采样。lhsdesign
函数比较简单,大家可以自己玩玩。
这个例子是在这篇文章的基础上修改的。第一维度服从
X
∼
N
(
4
,
1
)
X \sim N(4,1)
X∼N(4,1),第二维度服从
X
∼
N
(
0
,
4
)
X \sim N(0,4)
X∼N(0,4)
% 拉丁超立方采样的试验程序
% 每个维度都服从一个参数不同正态分布,每个维度都是独立的。
clear; clc; close all;
Mu = [4 0];
Sigma = [1 4];
% SIGMA must be a square matrix with size equal to the number of columns in MU, or a row vector with length equal to the number of columns in MU.
% 虽然系统这么提示,但是CovarianceMatrix直接用p*1维向量不行
CovarianceMatrix = Sigma;
CovarianceMatrix = diag(CovarianceMatrix); % 转换为对角矩阵
N = 80; % 样本点数目
X = lhsnorm(Mu, CovarianceMatrix, N); % 调用函数
figure
plot(X(:,1),X(:,2),'*')
绘图结果
可以很明显的看出
- 在各个维度上,抽样值都服从各自的分布
- 即使服从的分布是正态分布,样本点仍较为均匀地分布在样本空间,没有很严重的聚集现象,这是拉丁超立方抽样相对于完全随机抽样的优点
- 概率密度低处取得的点(图中的离群点),因为强制分层抽样的原因,依然会被抽样到,这是该方法的另一个优点
参考资料
Latin hypercube sample - MATLAB lhsdesign
Latin hypercube sample from normal distribution - MATLAB lhsnorm
Latin Hypercube Sampling
LHS拉丁超立方采样matlab程序,对于均匀分布与正态(高斯)分布的变量进行拉丁超立方采样_Kevin的小屋-CSDN博客