本文介绍如何在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;