J'essaie de réduire un ensemble de données de grande dimension en 2D. Cependant, je n'ai pas accès à l'intégralité du jeu de données à l'avance. Donc, je voudrais générer une fonction qui prend un vecteur N-dimensionnel et renvoie un vecteur bidimensionnel, de sorte que si je le donne à des vecteurs proches dans l'espace N-dimensionnel, les résultats sont proches en 2 dimensions espace. Je pensais que SVD était la réponse dont j'avais besoin, mais je ne peux pas le faire fonctionner. Pour simplifier, laissez N = 3 et supposons que j'ai 15 points de données. Si j'ai toutes les données à l'avance dans une matrice X 15x3, alors:Réduction des dimensions
[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,:);
fait ce que je veux. Mais supposons que j'obtiens un nouveau point de donnée, A, un vecteur 1x3. Existe-t-il un moyen d'utiliser U, S ou V pour transformer A en le vecteur 1x2 approprié?
Si la SVD est une cause perdue, quelqu'un peut-il me dire ce que je devrais faire à la place?
Note: Ceci est du code Matlab, mais peu m'importe si la réponse est C, Java, ou juste mathématique. Si vous ne pouvez pas lire Matlab, demandez et je vais clarifier.
Ugh, s vs S trompe vraiment l'oeil. ;) –