Я пытаюсь применить метод случайных проекций к очень разреженному набору данных. Я нашел статьи и руководства по методу Джонсона Линденштрауса, но каждая из них полна уравнений, которые не дают мне значимого объяснения. Например, этот документ на Johnson-Lindenstrauss
К сожалению, из этого документа я не могу получить представление об этапах реализации алгоритма. Это долгий путь, но есть ли кто-нибудь, кто может сказать мне простую английскую версию или очень простой псевдокод алгоритма? Или с чего начать копать эти уравнения? Какие-либо предложения?
Например, что я понял из алгоритма, читая эту статью, касающуюся Джонсона-Линденштрауса , так это:
AxB
, где A
- количество образцов, а B
- количество измерений, например 100 x 5000
. И я хочу уменьшить его размер до 500
, что даст матрицу 100x500
. Насколько я понимаю: во-первых, мне нужно построить матрицу 100x500
и случайным образом заполнить записи +1
и -1
(с Вероятность 50%).
Редактировать:
Хорошо, я думаю, что начал понимать. Итак, у нас есть матрица A
, которая равна mxn
.Мы хотим уменьшить его до E
, что составляет mxk
.
Что нам нужно сделать, так это построить матрицу R
, которая имеет размерность nxk
, и заполнить ее 0
, -1
или +1
относительно вероятности 2/3
, 1/6
и 1/6
.
После построения этого R
, мы просто произведем матричное умножение AxR
, чтобы найти нашу сокращенную матрицу E
. Но нам не нужно выполнять полное матричное умножение, потому что, если элемент Ri
равен 0
, нам не нужно выполнять вычисления. Просто пропустите это. Но если мы сталкиваемся с 1
, мы просто добавляем столбец, или, если это -1
, просто вычитаем его из расчета. Поэтому мы просто будем использовать суммирование, а не умножение, чтобы найти E
. И это то, что делает этот метод очень быстрым.
Получился очень изящный алгоритм, хотя я чувствую себя слишком глупо, чтобы понять эту идею.