在Matlab中使用princomp()?

时间:2015-06-11 03:57:07

标签: matlab princomp

我在MATLAB中执行以下操作:

>> X = [ 123 982 123 ; 434 233 842; 143 239 583; 733 292 503]

X =

123   982   123
434   233   842
143   239   583
733   292   503

[coeff,score] = princomp(X)

coeff =

-0.3714    0.9202    0.1241
 0.7330    0.2085    0.6475
-0.5700   -0.3314    0.7519


score =

 709.3366   26.4384   30.9912
-364.9469  -81.8490  125.1814
-104.8637 -262.5228 -101.7805
-239.5260  317.9334  -54.3921

>> X * coeff

ans =

 603.9913  277.1477  743.6166
-470.2922  168.8604  837.8069
-210.2090  -11.8134  610.8450
-344.8714  568.6428  658.2333

为什么得分= X * coeff?

我相信X * coeff与沿主要分量轴投影原始数据相同。

1 个答案:

答案 0 :(得分:0)

Xc*coeff不等于score,因为您的X未居中。

作为documentation says

  

princomp通过减去列平均值来中心X

以下是中心的作用:

[m n] = size(X);
Xc = X - kron(ones(m,1),sum(X,1))/m;

输出:

Xc =

 -235.2500  545.5000 -389.7500
   75.7500 -203.5000  329.2500
 -215.2500 -197.5000   70.2500
  374.7500 -144.5000   -9.7500

观察

  • [coeff,score] = princomp(Xc)返回与[coeff,score] = princomp(X)完全相同的结果。

  • Xc*coeff确实等于score

使用princomp时,您不必在将数据提供给princomp之前将数据居中,因为例程会为您执行此操作,并且可能以更有效的方式执行。

(顺便说一下:princomp已被弃用;建议改为使用pca。)