从带有噪声的高维球体中采样
Sampling from high dimensional sphere with noise
我想从带有噪声的高维球体生成向量样本。
即我正在尝试创建一个样本,使得任何向量 X 在 R^N 中并保持 ||X+epsilon||^2 = 1 其中 epsilon 是 R^N 中的 iid 向量,其中任何组件 epsilon_j 是分布式 N(0,sigma^2).
有人知道如何实施吗?我更喜欢使用 R.
谢谢!
我认为这应该可行。它可以很容易地变成一个函数。
d = 5 # number of dimensions
n_draws = 100 # number of draws
sigma = 0.2 # standard deviation
我首先对应该均匀分布在单位球体上的随机向量进行采样。我通过对 d 维多元正态分布的绘图进行归一化来做到这一点。 (可能有更直接的方法来完成这一步,但我稍后会再次使用 rmvnorm
,所以这很方便。)我称它们为 dirs
因为,因为我们正在规范化,所以我们'这一步真正要做的是采样 "directions".
library(mvtnorm)
# sample
dirs = rmvnorm(n = n_draws, mean = rep(0, d))
# normalize
dirs = dirs / sqrt(rowSums(dirs^2))
现在我们从多变量法线中再次绘制以添加噪声。
x = dirs + rmvnorm(n = n_draws, mean = rep(0, d), sigma = sigma * diag(d))
要将其映射到您在问题中使用的变量,请定义 Y = X + epsilon。我的dirs
是Y,那么我加的噪声是-epsilon;添加它们会产生您要求的 X。
我想从带有噪声的高维球体生成向量样本。
即我正在尝试创建一个样本,使得任何向量 X 在 R^N 中并保持 ||X+epsilon||^2 = 1 其中 epsilon 是 R^N 中的 iid 向量,其中任何组件 epsilon_j 是分布式 N(0,sigma^2).
有人知道如何实施吗?我更喜欢使用 R.
谢谢!
我认为这应该可行。它可以很容易地变成一个函数。
d = 5 # number of dimensions
n_draws = 100 # number of draws
sigma = 0.2 # standard deviation
我首先对应该均匀分布在单位球体上的随机向量进行采样。我通过对 d 维多元正态分布的绘图进行归一化来做到这一点。 (可能有更直接的方法来完成这一步,但我稍后会再次使用 rmvnorm
,所以这很方便。)我称它们为 dirs
因为,因为我们正在规范化,所以我们'这一步真正要做的是采样 "directions".
library(mvtnorm)
# sample
dirs = rmvnorm(n = n_draws, mean = rep(0, d))
# normalize
dirs = dirs / sqrt(rowSums(dirs^2))
现在我们从多变量法线中再次绘制以添加噪声。
x = dirs + rmvnorm(n = n_draws, mean = rep(0, d), sigma = sigma * diag(d))
要将其映射到您在问题中使用的变量,请定义 Y = X + epsilon。我的dirs
是Y,那么我加的噪声是-epsilon;添加它们会产生您要求的 X。