我试图将高维数据集减少到2-D。但是,我无法预先访问整个数据集。所以,我想生成一个函数,它需要一个N维向量并返回一个二维向量,这样,如果我给它在N维空间中靠近的向量,结果在二维空间。减少尺寸
我以为SVD是我需要的答案,但我无法让它工作。
为简单起见,设N = 3并假设我有15个数据点。如果我在15x3矩阵X中预先获得所有数据,则:
[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,请问,我会澄清。
呃,s和s真的会欺骗眼睛。 ;) – 2009-10-08 17:02:47