在网上下到一个程序:
里面有个函数是princomp 可能是因为matlab 版本的问题:
我的matlab(14a) 只能支持pca,但是要把princomp 转成pca 貌似还是需要一点小技巧的:
参考博客:http://www.cnblogs.com/haore147/p/3630002.html
princomp 的用法为:
[COEFF,SCORE,latent,tsquare] = princomp(X)
我们以
X=[ 7 26 6 60
1 29 15 52
11 56 8 20
11 31 8 47
7 52 6 33
11 55 9 22
3 71 17 6
1 31 22 44
2 54 18 22
21 47 4 26
1 40 23 34
11 66 9 12
10 68 8 12]
因为后面的主要是使用了score ,所以我们的目的是找出来怎么样 利用pca 函数算出来score
在晚上找出来的计算方法:
COEFF(T)为特征向量矩阵
SCORE(Y)为得分矩阵
LATENT(R)为特征值矩阵
X的方差协方差矩阵为S,则
S=cov(x)
那么S 的结果为:
S=[
34.6026 20.9231 -31.0513 -24.1667
20.9231 242.1410 -13.8782 -253.4167
-31.0513 -13.8782 41.0256 3.1667
-24.1667 -253.4167 3.1667 280.1667
]
T*R*T'=S, T'*S*T=R
Y=T'*X
[U,mu,vars]=pca(X) 我们得到的结果是:
U =
0.1289 0.5651 0.2445 -0.0000
0.1453 0.4630 -0.1598 -0.0000
0.3097 -0.0673 0.1482 -0.0000
0.1418 0.3611 0.2336 -0.0000
0.3035 0.1325 0.1598 -0.0000
0.3000 -0.0418 0.1283 -0.0000
0.4139 -0.2805 -0.3149 0.0000
0.1384 0.3390 -0.3772 0.0000
0.3007 -0.0152 -0.3150 0.0000
0.2236 0.0005 0.4952 -0.0000
0.1959 0.1787 -0.4359 0.0000
0.3738 -0.2076 0.0979 0.0000
0.3939 -0.2079 0.1040 0
此处的U 即使 princomp 里面的 score 。
但是我们发现其实 score 的值与PCA 求出来的U 的值不是一样的。
score =
我就把U暂时代替score。
score 与 U 之间有什么关系. 需要进一步探究。