- 在线时间
- 100 小时
- 最后登录
- 2015-10-26
- 注册时间
- 2014-1-8
- 听众数
- 10
- 收听数
- 1
- 能力
- 0 分
- 体力
- 1022 点
- 威望
- 0 点
- 阅读权限
- 40
- 积分
- 421
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 226
- 主题
- 5
- 精华
- 0
- 分享
- 0
- 好友
- 10
升级   40.33% TA的每日心情 | 开心 2015-10-26 08:32 |
---|
签到天数: 143 天 [LV.7]常住居民III
- 自我介绍
- 新手
 群组: 国赛讨论 |
本帖最后由 MCR董事长 于 2014-8-22 08:36 编辑
- %主成分分析10.2.4
- clc,clear
- load gj.txt %把原始数据保存在纯文本文件gj.txt中
- %gj=zscore(gj); %数据标准化
- r=corrcoef(gj); %计算相关系数矩阵
- %下面利用相关系数矩阵进行主成分分析,vec1的列为r的特征向量,即主成分的系数
- [vec1,lamda,rate]=pcacov(r) %lamda为r的特征值,rate为各个主成分的贡献率
- f=repmat(sign(sum(vec1)),size(vec1,1),1);%构造与vec1同维数的元素为±1的矩阵
- vec2=vec1.*f %修改特征向量的正负号,使得每个特征向量的分量和为正
- num=4; %num为选取的主成分的个数
- df=gj*vec2(:,1:num); %计算各个主成分的得分
- tf=df*rate(1:num)/100; %计算综合得分
- [stf,ind]=sort(tf,'descend'); %把得分按照从高到低的次序排列
- stf=stf', ind=ind'
复制代码 以上是司守奎老师的《数学建模算法与应用》主成分分析的例题10.2.4,相信很多人都在看这本书。我的问题是在主成分分析中,已求出特征值lamda,其对应的特征向量为vec1,那么显然vec2=-vec1也是lamda的特征向量,且vec2也符合标准正交之类的条件。那么在算各主成分的时候,是用vec1还是vec2呢,或是都可以?
以上代码中的8,9两行显然是对特征向量的方向进行矫正的,保证所选特征向量的和为正。本书主成分分析的所有代码都有此矫正过程,可是除了在这本书的代码中,其他书中都没有这样的代码。且目前还没在任何资料中发现对特征向量方向的说明。此代码这么做的依据又何在?
不过特征向量的方向肯定会影响最终主成分得分,甚至可能影响主成分法评价的结果的呀。请大神赐教,这个方向到底怎么选?!!本来觉得主成分分析挺简单,没问题,看了他的代码又有点糊涂了。
|
zan
|