在 MATLAB 中使用 PCA 降低特征维度

Reducing dimensionality of features with PCA in MATLAB

我对 PCA 完全困惑。我有一个大小为 90x60x12x350 的 4D 图像。这意味着每个体素都是一个大小为 350(时间序列)的向量。

现在我将 3D 图像 (90x60x12) 分成立方体。假设一个立方体包含 n 个体素,所以我有 n 个大小为 350 的向量。我想将这个 n 个向量减少到只有一个向量,然后计算所有立方体的所有向量之间的相关性。

所以对于立方体,我可以构造矩阵 M,我只是将每个体素放在一起,即 M = [v1 v2 v3 ... vn],每个 v 的大小为 350。

现在我可以通过使用 [coeff, score, latent, ~, explained] = pca(M); 并获取第一个组件在 Matlab 中应用 PCA。现在我的困惑开始了。

  1. 我是否应该转置矩阵 M,即 PCA(M')

  2. 我应该取coeff的第一列还是score的第一列?

  3. 第三个问题现在有点不相关了。假设我们有一个 矩阵 A = rand(30,100) 其中行是数据点和 列是特征。现在我想降低维度 特征向量但保留所有数据点。

    如何使用 PCA 执行此操作?

    当我做 [coeff, score, latent, ~, explained] = pca(M); 然后 coeff 的尺寸为 100x29,score 的尺寸为 30x29。我是 完全糊涂了。

  1. 是的,根据pca帮助,"Rows of X correspond to observations and columns to variables."

  2. score只是告诉你M在主成分space中的表示。您想要 coeff.

  3. 的第一列
  4. numberOfDimensions = 5;
    coeff = pca(A);
    reducedDimension = coeff(:,1:numberOfDimensions);
    reducedData = A * reducedDimension;
    

我不同意上面的回答。

[coeff,score]=pca(A)

其中 A 的行作为观察值,列作为特征。

如果 A 有 3 个特征和 >3 个观察值(假设 100)并且您想要 2 维的 "feature",例如矩阵 B(B 的大小为 100X2)。你应该做的是:

B = score(:,1:2);