使用 PCA,返回的每个主成分将是原始列/维度的线性组合。也许一个例子可以消除你的任何误解。
让我们考虑由 150 个实例和 4 个维度组成的 Fisher-Iris 数据集,并对数据应用 PCA。为了让事情更容易理解,在调用 PCA 函数之前,我首先将数据归零:
load fisheriris
X = bsxfun(@minus, meas, mean(meas)); %# so that mean(X) is the zero vector
[PC score latent] = princomp(X);
让我们看看第一个返回的主成分(PC
矩阵的第一列):
>> PC(:,1)
0.36139
-0.084523
0.85667
0.35829
这表示为原始尺寸的线性组合,即:
PC1 = 0.36139*dim1 + -0.084523*dim2 + 0.85667*dim3 + 0.35829*dim4
因此,要在由主成分组成的新坐标系中表达相同的数据,新的第一维应该是按照上式对原来的第一维进行线性组合。
我们可以简单地将X*PC
其计算为 PRINCOMP ( ) 的第二个输出中返回的确切内容score
,以确认此尝试:
>> all(all( abs(X*PC - score) < 1e-10 ))
1
最后,每个主成分的重要性可以通过它解释的数据方差的多少来确定。这由 PRINCOMP ( latent
) 的第三个输出返回。
我们可以在不使用 PRINCOMP 的情况下自己计算数据的 PCA:
[V E] = eig( cov(X) );
[E order] = sort(diag(E), 'descend');
V = V(:,order);
协方差矩阵的特征向量V
是主成分(PC
同上,虽然符号可以取反),对应的特征值E
代表解释的方差量(同latent
)。请注意,习惯上按其特征值对主成分进行排序。和以前一样,为了在新坐标中表达数据,我们简单地计算X*V
(应该和score
上面一样,如果你确保匹配符号)