Здравствуйте, мне было интересно, если кто-нибудь может помочь.Я использую R, чтобы выполнить случайную проекцию на гауссиан.Мне нужно взять k гауссовских случайных векторов U1, ..., Uk в R (реал). Затем для любого вектора v в d измерениях выполнить случайную проекцию: f (v) = v.U1, v.U2, ..., v.Uk, который уменьшает v от d измерений до k измерений. Итак, мне нужно v1, ... vn, так что n векторов
, и тогда основная идея состоит в том, что относительные порядки будут сохраняться между векторами v после проекции.т.е. ближайшие соседи для каждого вектора будут одинаковыми до проекции (v1, v2, ..., vn) и после проекции f (v1), ... f (vk)
Я пытаюсьпроизвести это в R. Мне удалось создать матрицу для U и V. Однако теперь мне нужно использовать скалярное произведение для выполнения проекции, беря каждую строку v (vi) и умножая ее на каждый столбец матрицы U.Мне нужно выполнить это для n векторов и иметь матрицу в качестве результата.
Это позволило бы мне найти расстояния между каждым f (vi)!
Любая помощь будет принята с благодарностью, спасибо!
Вот что у меня сейчас есть:
d <- 1000 #original dimension
k <- 500 #reduced dimension
n <- 10 #number of points
mu <- rep(0,d)
sigma <- diag(x=rep(1,d))
u <- sapply(1:k, function(x){
mvrnorm(d, mu, sigma)
})
v <- sapply(1:n, function(x){
mvrnorm(d, mu, sigma)
})
projection <- sapply(1:k, function(j) {sapply(1:d, function(i) u[i,j] * v[i])})
но я знаю, что это неправильно!Я новичок в R и очень смущен!спасибо