Matlab中的降维

时间:2015-05-20 14:59:45

标签: matlab pca

我想在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。

2 个答案:

答案 0 :(得分:2)

pcares正在履行其职责。如果您阅读documentation,则以这种方式调用函数:

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

RESIDUALS通过保留数据的第一个NDIM维度返回每个数据点的残差,RECONSTRUCTED是使用第一个NDIM主成分的重建数据。< / p>

如果您想要实际投影向量,则需要使用pca。你这样称呼它:

[coeff,score] = pca(x);

实际上,这就是pcares在幕后所做的事情,但它也使用上述输出为您重建数据。 coeff返回数据的主系数,score返回实际投影向量本身。 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的内幕。

答案 1 :(得分:-3)

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