Я пытаюсь уменьшить набор данных высокой размерности до 2-D. Однако у меня нет доступа ко всему набору данных заранее. Итак, я хотел бы сгенерировать функцию, которая принимает N-мерный вектор и возвращает 2-мерный вектор, так что если я передам его векторам, близким в N-мерном пространстве, результаты будут близки в 2-мерном пространство.
Я думал, что SVD - это тот ответ, который мне нужен, но я не могу заставить его работать.
Для простоты, давайте N = 3 и предположим, что у меня есть 15 точек данных. Если у меня есть все данные заранее в матрице X 15x3, то:
[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,:);
делает то, что я хочу. Но предположим, что у меня есть новый объект данных, A, вектор 1x3. Есть ли способ использовать U, S или V, чтобы превратить A в соответствующий вектор 1x2?
Если SVD - безнадежное дело, может кто-нибудь сказать мне, что я должен делать вместо этого?
Примечание: это код Matlab, но мне все равно, ответ C, Java или просто математика. Если ты не умеешь читать Matlab, спроси, и я уточню.