Случайная проекция в R - умножение строки на матрицу - PullRequest
0 голосов
/ 05 декабря 2018

Здравствуйте, мне было интересно, если кто-нибудь может помочь.Я использую 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 и очень смущен!спасибо

...