Выборка из сферы большого размера с шумом

Я хочу создать образец векторов из многомерной сферы с шумом.

т.е. Я пытаюсь создать образец таким образом, что любой вектор X находится в R ^ N и содержит || X + эпсилон || ^ 2 = 1, где эпсилон - это вектор iid в R ^ N, из которого любой компонент epsilon_j распределен N (0 ,сигма^2).

Кто-нибудь знает, как это реализовать? Я бы предпочел использовать R.

Благодарю вас!


person HUO    schedule 27.07.2015    source источник


Ответы (1)


Я думаю, это должно сработать. Его можно легко превратить в функцию.

d = 5         # number of dimensions
n_draws = 100 # number of draws
sigma = 0.2   # standard deviation

Я начинаю с выборки случайных векторов, которые должны быть равномерно распределены на единичной сфере. Я делаю это, нормализуя отрисовки из d-мерного многомерного нормального распределения. (Возможно, есть более прямой способ сделать этот шаг, но я буду использовать rmvnorm позже, так что это было удобно.) Я называю их dirs, потому что, поскольку мы нормализуем, все, что мы действительно делаем на этом шаге, — это выборка. "направления".

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 + эпсилон. Мой dirs — это Y, тогда я добавляю шум — эпсилон; добавление их дает X, который вы просили.

person Gregor Thomas    schedule 27.07.2015