查看: 7199|回复: 10|关注: 0

[已答复] matlab主成分分析疑惑

[复制链接]

新手

11 麦片

财富积分


050


19

主题

168

帖子

0

最佳答案
QQ
发表于 2012-8-16 11:52:49 | 显示全部楼层 |阅读模式
a=[0.7883 0.7391 0.8111 0.6587 0.6543 0.8259 0.8486 0.6834 0.8495 0.7846
       0.7633 0.7287 0.7629 0.8552 0.7564 0.7455 0.7800 0.9490 0.8918 0.8954
       0.4745 0.5126 0.8810 0.8903 0.8288 0.7850 0.8032 0.8862 0.3987 0.3970
       0.8246 0.7603 0.6888 0.8977 0.7926 0.7856 0.6509 0.8902 0.6799 0.9877
       0.8791 0.8736 0.8183 0.9446 0.9202 0.9263 0.9185 0.9505 0.8620 0.8873
       0.9538 0.9257 0.9285 0.9434 0.9154 0.8871 0.9357 0.8760 0.9579 0.9741
       0.8785 0.8542 0.8537 0.9027 0.8729 0.8485 0.8473 0.9044 0.8866 0.9035
       0.6305 0.6187 0.6313 0.7415 0.6398 0.6142 0.5734 0.8980 0.6186 0.7382
       0.8928 0.7831 0.5608 0.8419 0.8464 0.7616 0.8234 0.6384 0.9604 0.8514];
b=zscore(a);%标准化原始数据
u=corrcoef(b);%相关阵
[v,s]=eig(u);%相关阵的特征向量(也就是主成分系数)与特征值
[x,y]=princomp(b);%matlab自带的主成分分析函数,x返回主成分系数
v,x%v应该与x相同

结果:可以看到为什么不一样呢(其实有些一样,只是符号相反,但有些确实不一样)
v =
    0.8204    0.0826    0.0335   -0.1837   -0.1248    0.1568   -0.0009    0.0726    0.3052    0.3831
   -0.4527    0.2521   -0.2840   -0.6403   -0.0504    0.1034   -0.1275    0.0858    0.1807    0.4138
    0.0079   -0.0038    0.1528    0.0468   -0.6093    0.0371   -0.5532   -0.2529   -0.4460    0.1813
   -0.0168    0.5160   -0.2051    0.3608   -0.2234   -0.0399    0.4092    0.3836   -0.3515    0.2676
   -0.0868   -0.5676    0.3519   -0.2642   -0.1188   -0.0546    0.5052    0.0852   -0.2813    0.3435
   -0.0773    0.1696    0.2960    0.1931    0.5510    0.5322   -0.0667   -0.2585   -0.2087    0.3725
    0.1235   -0.2133   -0.5986    0.1211    0.2275   -0.3881    0.0287   -0.4681   -0.1623    0.3430
    0.1643   -0.0868    0.0206   -0.1585    0.4210   -0.2829   -0.4350    0.5872   -0.3838    0.0354
   -0.1575    0.2157    0.4921    0.2035    0.0432   -0.6204   -0.0924   -0.0670    0.3639    0.3358
   -0.2027   -0.4614   -0.2009    0.4854   -0.1103    0.2449   -0.2283    0.3657    0.3506    0.2985

x =
   -0.3831   -0.3052    0.0726    0.0009   -0.1568    0.1248   -0.1837   -0.0335    0.6592   -0.4952
   -0.4138   -0.1807    0.0858    0.1275   -0.1034    0.0504   -0.6403    0.2840   -0.5179    0.0186
   -0.1813    0.4460   -0.2529    0.5532   -0.0371    0.6093    0.0468   -0.1528    0.0087   -0.0008
   -0.2676    0.3515    0.3836   -0.4092    0.0399    0.2234    0.3608    0.2051   -0.2814   -0.4328
   -0.3435    0.2813    0.0852   -0.5052    0.0546    0.1188   -0.2642   -0.3519    0.2195    0.5306
   -0.3725    0.2087   -0.2585    0.0667   -0.5322   -0.5510    0.1931   -0.2960   -0.1539   -0.1051
   -0.3430    0.1623   -0.4681   -0.0287    0.3881   -0.2275    0.1211    0.5986    0.2161    0.1186
   -0.0354    0.3838    0.5872    0.4350    0.2829   -0.4210   -0.1585   -0.0206    0.1855   -0.0108
   -0.3358   -0.3639   -0.0670    0.0924    0.6204   -0.0432    0.2035   -0.4921   -0.2464   -0.1031
   -0.2985   -0.3506    0.3657    0.2283   -0.2449    0.1103    0.4854    0.2009    0.0653    0.4997

论坛优秀回答者

15

主题

1872

帖子

117

最佳答案
  • 关注者: 173
发表于 2012-8-16 14:57:04 | 显示全部楼层
本帖最后由 stats01 于 2012-8-16 15:03 编辑

正常情况下,x=fliplr(v)左右对调,它们应该一样(或只是正负相差),其性质一样。但这里a不满秩,它们最小(几个)的特征值对应的特征向量就不一定相同了。

新手

11 麦片

财富积分


050


19

主题

168

帖子

0

最佳答案
QQ
 楼主| 发表于 2012-8-16 20:51:42 | 显示全部楼层
本帖最后由 shengsheng 于 2012-8-16 20:58 编辑


我是不是能这样认为,满秩的时候,这里的特征向量,即单位正交向量唯一(除去符号外)?
另外,既然非满秩情况下,该特征向量矩阵不唯一,那么在主成分分析的时候到底选择哪个才对呢?特别是在计算总得分排名时,即便只有符号差异的情况下,得分排名也会受到影响的,这时该怎么办?

论坛优秀回答者

15

主题

1872

帖子

117

最佳答案
  • 关注者: 173
发表于 2012-8-16 21:30:33 | 显示全部楼层
在X满秩(R=corr(X)正定)的情况下,这两者是一样的,但需注意,[t,r]=eig(R)的特征值(特征向量)是由小到大排列的,而princomp(X)的特征值(特征向量)是由大到小排列的。由于存在次序上的不同,我还是建议使用[t,score,r]=princomp(X)来计算,其中的score即为主成分值,可以直接(取前面若干)使用。

新手

11 麦片

财富积分


050


19

主题

168

帖子

0

最佳答案
QQ
 楼主| 发表于 2012-8-17 08:53:43 | 显示全部楼层
stats01 发表于 2012-8-16 21:30
在X满秩(R=corr(X)正定)的情况下,这两者是一样的,但需注意,[t,r]=eig(R)的特征值(特征向量)是由小 ...

其实你说的我已经理解了,不过,这个问题,你仿佛没有正面回答我。也就是说,就算在满秩情况下,求出来的特征向量也会有符号差异的(这是我个人理解),而符号的选择不同,会影响总得分的排名(你上面上的那个score是得分矩阵,不是总得分),总得分等于贡献率去加权score所得的值。那么这个时候,如何确定符号的选择呢?

==
附:引自一文献(出处已不记得了)

第一主成分=标准化后的各行指标×第一特征向量'(即线性组合)
第二主成分=标准化后的各行指标×第二特征向量'
综合评价值=第一主成分贡献率×第一主成分+第二主成分贡献率×第二主成分
上几式给第一或第二特征向量取负号或者都取负号,将使综合评价值产生巨大的变化,从而无法由综合评价值(也就是我上面说的总得分值,本人注)说明所分析的问题。

论坛优秀回答者

15

主题

1872

帖子

117

最佳答案
  • 关注者: 173
发表于 2012-8-17 10:02:40 | 显示全部楼层
你所说的总得分的排名,当然会与符号有关。由eig 与 princomp两个命令所得结果可知,它们可能符号一样,也可能符号相反。如果是后者,总得分的排序刚好与前者相反。如何评价总得分,可以用两个(或多个)已知其特征(好、坏)的点作为参照点。再确定其正负号及其排名,这样的结果往往有较好的说服力和可信度。

新手

5 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
发表于 2012-8-17 10:03:43 | 显示全部楼层
还是用SPSS吧 容易好多

新手

11 麦片

财富积分


050


19

主题

168

帖子

0

最佳答案
QQ
 楼主| 发表于 2012-8-29 16:26:09 | 显示全部楼层
非常感谢上面的朋友

MATLAB 基础讨论
版块优秀回答者

入门

316 麦片

财富积分


50500


25

主题

965

帖子

68

最佳答案
QQ
  • 关注者: 7
发表于 2012-9-19 21:54:31 | 显示全部楼层
学习了。。。。

新手

5 麦片

财富积分


050


1

主题

3

帖子

0

最佳答案
发表于 2013-4-10 10:22:13 | 显示全部楼层
这个问题我也遇到过,在这里学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表