Matlab Tutorial 04 official PCA

发布于 2021-06-08  63 次阅读



  本文介绍如何在Matlab中使用官方库函数提供的PCA方法。

.1 pca()参数介绍

coeff = pca(X)
coeff = pca(X,Name,Value)
[coeff,score,latent] = pca(___)
[coeff,score,latent,tsquared] = pca(___)
[coeff,score,latent,tsquared,explained,mu] = pca(___)

  下面介绍它的输入参数:

  •   Input Argument 0: 维度为n * m的特征矩阵,n是样本数,p是特征数。
  •   Input Argument 1: 'svd' (default) | 'eig' | 'als'
      'Algorithm' — Principal component algorithm
      主成分分析使用的算法。eig (Eigenvalue decomposition )算法, 此算法当n(number of examples) > p (features) 时,速度快于SVD,但是计算的结果没有SVD精确。als( Alternating least squares )算法,此算法为了处理数据集X中有少许缺失数据时的情况(i.e 0), 但是对于X为稀疏数据集(缺失数据过多)时不好用。
  •   Input Argument 2: true (default) | false
      'Economy' — Indicator for economy size output
      选择是否对数据进行中心化,也是数据的特征是否进行零均值化(i.e.按列减去均值,为了得到covariance matrix), 如果选择了true,则可用score*coeff'恢复中心化后的X,若选择了false,则可用score*coeff'恢复原始的X。
  •   Input Argument 3: true (default) | false
      'Economy' — Indicator for economy size output
      有时候输出的coeff(映射矩阵p-by-p)过大,而且是没有必要的(因为我们要降维),所以可以只输出coeff(以及score,latent)的前d列,d是数据集的自由度,数据集没NAN的时候d=n-1;具体的解释见matlab。总之如果将看见完整的PCA结果,可以设置为false。
  •   Input Argument 4: number of variables (default) | scalar integer
      'NumComponents' — Number of components requested
      输出指定的components也就是更为灵活的Economy,但是经过试验发现指定成分数仅在小于d(自由度)时有效,大于d时无效;默认: number of variables ( i.e p,特征数目)。
  •   其余参数见官方文档。

.2 实例

[cfPC, cfScore, cfLatent, cfLsquare] = pca(ClassFeature);
cfAcc = cumsum(cfLatent) ./ sum(cfLatent);
% 变换矩阵
cfTran = cfPC(:, 1:4);
ClassFeature = bsxfun(@minus, ClassFeature, mean(ClassFeature, 1));
ClassFeaturePCA = ClassFeature * cfTran;