【发布时间】:2023-04-09 13:15:01
【问题描述】:
我正在尝试将高维数据集缩减为二维。但是,我无法预先访问整个数据集。所以,我想生成一个函数,它接受一个 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 vs. S 真的很吸引眼球。 ;)
标签: math matlab svd dimension-reduction