【问题标题】:Dimension Reduction降维
【发布时间】: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


【解决方案1】:

SVD 是一种很好的方法(可能)。 LSA (Latent Semantic Analysis) 是基于它,并且具有基本相同的维度方法。我在以下位置(详细地)谈到了这一点: lsa-latent-semantic-analysis-how-to-code-it-in-php 或在 SO 上查看 LSA 标签。

我意识到这是一个不完整的答案。如果您需要更多帮助,请大声喊叫!

【讨论】:

  • 谢谢,这很有帮助。为了把 U 变成 U',我是简单地截断第二列之后的所有内容,还是比这更花哨?
  • 我很确定它就是这么简单(假设 matlab 对列进行排序,使得 cols 和 eigenvals 对应)
  • 好的。我只是按照我认为你说它会工作的方式来玩它,但我仍然无法在不重新计算整个 UxSxV 集的情况下获取新的 3-d 数据并获得 2-d 投影。我错过了 LSA 中的某些内容吗?也就是说,我有 X (15x3)、U、S、V、U'、S'、V',现在我得到 A (1x3)。我应该怎么做才能获得 1x2 版本的 A?
  • 呃,除以 V* 是我要找的。我不知道为什么我之前错过了。
  • 听起来你已经掌握得很好 :) 我永远记不住确切的公式,所以我只是在找合适尺寸的末端矩阵,就像你一样!
【解决方案2】:
% generate some random data (each row is a d-dimensional datapoint)
%data = rand(200, 4);
load fisheriris
data = meas;        % 150 instances of 4-dim

% center data
X = bsxfun(@minus, data, mean(data));

% SVD
[U S V] = svd(X, 'econ');       % X = U*S*V''

% lets keep k-components so that 95% of the data variance is explained
variances = diag(S).^2 / (size(X,1)-1);
varExplained = 100 * variances./sum(variances);
index = 1+sum(~(cumsum(varExplained)>95));

% projected data = X*V = U*S
newX = X * V(:,1:index);
biplot(V(:,1:index), 'scores',newX, 'varlabels',{'d1' 'd2' 'd3' 'd4'});

% mapping function (x is a row vector, or a matrix with multiple rows vectors)
mapFunc = @(x) x * V(:,1:index);
mapFunc([1 2 3 4])

【讨论】:

    【解决方案3】:

    我认为在 Matlab 中没有更新现有 SVD 的内置方法。我在 Google 上搜索“SVD 更新”,在众多结果中找到了 this paper

    【讨论】:

      猜你喜欢
      • 2013-12-31
      • 1970-01-01
      • 2013-08-14
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2016-12-18
      相关资源
      最近更新 更多