从奇异高斯分布生成样本

机器算法验证 正态分布 随机生成
2022-01-24 03:24:43

让随机向量x=(x1,...,xn)遵循具有均值的多元正态分布m和协方差矩阵S. 如果S是对称且正定的(这是通常的情况),那么可以从x通过第一次独立采样r1,...,rn从标准正常,然后使用公式m+Lr, 在哪里L是 Cholesky 下因子,因此S=LLTr=(r1,...,rn)T.

如果一个人想要来自奇异高斯的样本怎么办,即S仍然是对称的,但不是更正定(只有半正定)。我们还可以假设方差(的对角元素S) 是严格积极的。然后是一些元素x必须具有线性关系,并且分布实际上位于具有维度的低维空间<n, 对?

很明显,如果例如n=2,m=[00],S=[1111]然后可以生成x1N(0,1)并设置x2=x1因为它们是完全相关的。但是,有没有什么好的方法可以为一般情况生成样本n>2? 我想首先需要能够识别低维子空间,然后移动到具有有效协方差矩阵的空间,然后从中采样,最后从这个低维样本中推断出线性因变量的值。但是在实践中最好的方法是什么?有人可以指点我有关该主题的书籍或文章吗?我找不到一个。

1个回答

奇异高斯分布是低维空间中非奇异分布的前推。在几何上,您可以采用标准正态分布,对其重新缩放、旋转并将其等距嵌入到更高维空间的仿射子空间中。在代数上,这是通过奇异值分解 (SVD) 或其等价物来完成的。


Σ是协方差矩阵和μ中的平均值Rn. 因为Σ是非负定和对称的,SVD 将采用形式

Σ=UΛ2U

对于正交矩阵UO(n)和一个对角矩阵Λ. Λ会有m非零条目,0mn.

X有一个标准的正态分布Rm: 也就是说,它的每一个mcomponents 是具有零均值和单位方差的标准正态分布。稍微滥用符号,扩展组件Xnm零使其成为n-向量。然后UΛXRn我们可以计算

Cov(UΛX)=UΛCov(X)ΛU=UΛ2U=Σ.

最后

Y=μ+UΛX

具有预期的高斯分布Rn.

有趣的是,当n=m:也就是说,这是一种(标准)方法,可以为任何给定的平均值生成任何维度的多元法线向量μ和协方差Σ通过使用标准正态值的单变量生成器。


例如,这里是一千个模拟点的两个视图n=3m=2

查看 1

查看 2

第二种观点,从侧面看,展示了分布的奇异性。产生这些数字的R代码遵循前面的数学说明。

#
# Specify a Normal distribution.
#
mu <- c(5, 5, 5)
Sigma <- matrix(c(1, 2, 1,
                  2, 3, 1,
                  1, 1, 0), 3)
#
# Analyze the covariance.
#
n <- dim(Sigma)[1]
s <- svd((Sigma + t(Sigma))/2) # Guarantee symmetry
s$d <- abs(zapsmall(s$d))
m <- sum(s$d > 0)
#$
# Generate a standard Normal `x` in R^m.
#
n.sample <- 1e3 # Number of points to generate
x <- matrix(rnorm(m*n.sample), nrow=m)
#
# Embed `x` in R^n and apply the square root of Sigma obtained from its SVD.
#
x <- rbind(x, matrix(0, nrow=n-m, ncol=n.sample))
y <- s$u %*% diag(sqrt(s$d)) %*% x + mu
#
# Plot the results (presuming n==3).
#
library(rgl)
plot3d(t(y), type="s", size=1, aspect=TRUE, 
       xlab="Y1", ylab="Y2", zlab="Y3", box=FALSE,
       col="Orange")