Я пытаюсь уменьшить размерный набор данных до 2-мер. Однако у меня нет доступа ко всему набору данных заранее. Итак, я хотел бы сгенерировать функцию, которая берет N-мерный вектор и возвращает двумерный вектор, такой, что если я передам его векторам, близким к N-мерному пространству, результаты близки по 2-мерным пространство.Уменьшение по размеру
Я думал, что SVD был ответом, который мне нужен, но я не могу заставить его работать.
Для простоты N = 3 и предположим, что у меня 15 точек данных. Если у меня есть все данные заранее в матрице XXXXX, то:
[U, S, V] = svd(X);
s = S; %s is a the reduced version of S, since matlab is case-sensitive.
s(3:end,3:end)=0;
Y=U*s;
Y=Y(1:2,:);
делает то, что я хочу. Но предположим, что я получаю новый datapoint, A, вектор 1x3. Есть ли способ использовать U, S или V, чтобы превратить A в соответствующий вектор 1x2?
Если SVD является потерянной причиной, может ли кто-нибудь сказать мне, что я должен делать вместо этого?
Примечание: Это код Matlab, но мне все равно, является ли ответ C, Java или просто математикой. Если вы не можете прочитать Matlab, спросите, и я уточню.
Ugh, s vs. S действительно обманывает глаз. ;) –