我正在尝试将一个高维数据集减少为二维。但是,我无法提前访问整个数据集。因此,我想生成一个函数,该函数接受N维向量并返回一个二维向量,以便如果我将它们给予在N维空间中接近的向量,则结果在二维空间中也接近。
我认为奇异值分解(SVD)是我需要的答案,但我无法使它起作用。
为简单起见,令N=3,并假设我有15个数据点。如果我有一个15x3的矩阵X包含所有数据,则:
我认为奇异值分解(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向量?
如果奇异值分解方法行不通,有人能告诉我应该做些什么吗?
注意:这是Matlab代码,但我不在乎答案是C、Java还是纯数学。如果你不能读Matlab,请询问,我会澄清。