Matlab 中的降维

Dimensionality reduction in Matlab

我想在 MATLAB 中将数据降维到 ndim 维。我正在使用 pcares 来减少维度,但结果(即残差、重建)与数据具有相同的维度,而不是 ndim。我怎样才能将残差投影到 ndim 维度。

[residuals,reconstructed] = pcares(X,ndim)

示例代码

MU = [0 0];
SIGMA = [4/3 2/3; 2/3 4/3];
X = mvnrnd(MU,SIGMA,1000);
[residuals,reconstructed] = pcares(X,1)

现在我希望残差具有 1 个维度,即数据 X 投影到我指定为 pcares(X,1) 的素数分量。但是这里的残差和重建的都是2。

尝试使用 squeeze 命令 - 请参阅此处参考:http://uk.mathworks.com/help/matlab/ref/squeeze.html

pcares 正在做它的工作。如果你阅读 documentation,你可以这样调用函数:

[RESIDUALS,RECONSTRUCTED] = pcares(X,NDIM);

RESIDUALS returns 通过保留数据的第一个 NDIM 维度每个数据点的残差,RECONSTRUCTED 是使用第一个 [=16] 重建的数据=] 主成分。

如果你想要实际的投影向量,你需要改用pca。你可以这样称呼它:

[coeff,score] = pca(x);

事实上,这就是 pcares 在幕后所做的,但它还会使用上述输出为您重建数据。 coeff returns 数据的主要系数,而 score returns 实际投影向量本身。 score 使得每个 都是一个投影向量。应该注意的是,这些是按照您对 PCA 所期望的主导方向排序的......因此第一列是最主导的方向,第二列是第二主导方向,依此类推。

调用上面的代码后,只需索引 coeffscore 即可保留所需的任何组件。在你的情况下,你只需要第一个组件,所以这样做:

c = coeff(1);
s = score(:,1);

如果您想根据投影向量重建数据,参考代码的倒数第二行,很简单:

[coeff,score] = pca(x);
n = size(X,1);
ndim = 1; %// For your case
reconstructed = repmat(mean(X,1),n,1) + score(:,1:ndim)*coeff(:,1:ndim)';

以上基本上是 pcares 的幕后工作。