matlab 中自带的函数就不必怀疑。
princomp:principal componet analysis (PCA).
[COEFF,SCORE,latent,tsquare]=princomp(X);
参数:
%%%%%%%%%%%%%%%%%%
INPUT: X是数据:n*p,其中n代表样本个数,p代表特征维数
%%%%%%%%%%%%%%%%%%
OUTPUT:
COEFF: 协方差 p*p,投影矩阵
SCORE:投影之后的数据。如果样本个数<=特征维数,有一个有意思的
现象:SCORE(:,n:p), latent(n:p)都为零。为何呢?请以两个
数据点为例。即n=2,p=3;当选择了一个投影轴之后,再选一个
正交的抽,发现无论怎么选,它们投影之后都会重叠,即0。
latent:计算完之后并不是主成分归一化的权重。如果需要,用下面代码:
cumsum(latent)./sum(latent);
很注意的是:
训练样本计算出来了协方差矩阵。如果来了一个测试集,我们不能再去重新
计算一个协方差矩阵。因为那样会使训练集和测试集投影到不同的空间上,
最终导致特征空间不一致,训练出来的参数毫无意义。