正确使用Matlab中的PCA包
[coeff, score, latent ] = pca(X);
Xn×m
X
n
×
m
:n个样本,每个样本m维
coeff :特征向量,每一列表示一个特征向量。并以特征值从大到小排了序
score :新的数据表示,行表示样本,列表示样本属性。(与X一样)
latent :特征值,并以从大到小排序。可根据每个值占总数(sum(latent))的比例知道该维度的信息量多少。
例子证明
[1] load('hald','ingredients')
[2] [coeff,score,latent] = pca(ingredients)
说明
[1] 装载matlab中自带的一个数据集“ingredients”,该数据集表示13个样本,每个样本4个维度。
[2] 对数据“ingredients”,进行PCA处理,得到:特征向量coeff、新坐标下的数据表示score、特征值latent
验证
[3] ing = ingredients - repmat(mean(ingredients),[13,1]);
[4] cov_ing = cov( ing );
[5] [V,D] = eig( cov_ing )
[6] ing * coeff
说明
[3] 在每个维度上对数据进行去均值处理,得到去均值后的ing数据
[4] 对ing数据在维度间求协方差矩阵,得到cov_ing数据
[5] 对cov_ing数据求其特征值和特征向量。仔细观察,可以发现,这个和[2]中得到的coeff和latent其实是一样的,只是这里默认的是从小到大排序
[6] 对去均值后的ing数据右乘特征向量,或者换成ing * V
结果是一样的。仔细观察,可以发现,这个和[2]中得到的score是一样。
注
SVD与PCA相差的地方就在去均值与否上面
参考
Principal component analysis of raw data - MATLAB pca - MathWorks