在MATLAB中用PCA降低特征的维数

时间:2015-06-04 23:45:14

标签: matlab pca

我对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或得分的第一列吗?

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

    如何使用PCA执行此操作?

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

2 个答案:

答案 0 :(得分:4)

  1. 是的,根据pca帮助," X行对应于观察值和变量列。"

  2. score只是告诉您M在主要组件空间中的表示。您需要coeff的第一列。

  3. numberOfDimensions = 5;
    coeff = pca(A);
    reducedDimension = coeff(:,1:numberOfDimensions);
    reducedData = A * reducedDimension;
    

答案 1 :(得分:0)

我不同意上面的答案。

[coeff,score]=pca(A)

其中A有行作为观察,列作为要素。

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

B = score(:,1:2);