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 所期望的主导方向排序的......因此第一列是最主导的方向,第二列是第二主导方向,依此类推。
调用上面的代码后,只需索引 coeff
和 score
即可保留所需的任何组件。在你的情况下,你只需要第一个组件,所以这样做:
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
的幕后工作。
我想在 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 所期望的主导方向排序的......因此第一列是最主导的方向,第二列是第二主导方向,依此类推。
调用上面的代码后,只需索引 coeff
和 score
即可保留所需的任何组件。在你的情况下,你只需要第一个组件,所以这样做:
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
的幕后工作。