主成分分析法及MATLAB代码

1. cwstd.m总和标准化法标准化矩阵
%cwstd.m,用总和标准化法标准化矩阵
function std=cwstd(vector)
cwsum=sum(vector,1);         %对列求和
[a,b]=size(vector);          %矩阵大小,a为行数,b为列数
for i=1:a
    for j=1:b
        std(i,j)= vector(i,j)/cwsum(j);
    end
end


2. cwfac.m计算相关系数矩阵
%cwfac.m
function result=cwfac(vector);
fprintf('相关系数矩阵:\n')
std=CORRCOEF(vector)    %计算相关系数矩阵
fprintf('特征向量(vec)及特征值(val):\n')
[vec,val]=eig(std)    %求特征值(val)及特征向量(vec)
newval=diag(val) ;
[y,i]=sort(newval) ;      %对特征根进行排序,y为排序结果,i为索引
fprintf('特征根排序:\n')
for z=1:length(y)
    newy(z)=y(length(y)+1-z);
end
fprintf('%g\n',newy)
rate=y/sum(y);
fprintf('\n贡献率:\n')
newrate=newy/sum(newy)
sumrate=0;
newi=[];
for k=length(y):-1:1
    sumrate=sumrate+rate(k);
    newi(length(y)+1-k)=i(k);
    if sumrate>0.85 break;
    end  
end                %记下累积贡献率大85%的特征值的序号放入newi中
fprintf('主成分数:%g\n\n',length(newi));
fprintf('主成分载荷:\n')
for p=1:length(newi)
    for q=1:length(y)
        result(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p));
    end
end                    %计算载荷
disp(result)


3. cwscore.m
%cwscore.m,计算得分
function score=cwscore(vector1,vector2);
sco=vector1*vector2;
csum=sum(sco,2);
[newcsum,i]=sort(-1*csum);
[newi,j]=sort(i);
fprintf('计算得分:\n')
score=[sco,csum,j]            
%得分矩阵:sco为各主成分得分;csum为综合得分;j为排序结果


4. cwprint.m
%cwprint.m
function print=cwprint(filename,a,b);
%filename为文本文件文件名,a为矩阵行数(样本数),b为矩阵列数(变量指标数)
fid=fopen(filename,'r')
vector=fscanf(fid,'%g',[a b]);
fprintf('标准化结果如下:\n')
v1=cwstd(vector)
result=cwfac(v1);
cwscore(v1,result);



函数作用
Cwstd.m ——用总和标准化法标准化矩阵
Cwfac.m ——计算相关系数矩阵;计算特征值和特征向量;对主成分进行排序;计算各特征值贡献率;挑选主成分(累计贡献率大于85%),输出主成分个数;计算主成分载荷
Cwscore.m ——计算各主成分得分、综合得分并排序
Cwprint.m ——读入数据文件;调用以上三个函数并输出结果

以下是我的数据,保存在命名为sj.txt的文档文件中:
2.500         5.000         1.000         3.750         3.000         1.250         3.375         3.000         1.000         5.000         2.500         2.500         3.000         3.750
2.500         3.750         1.000         5.000         5.000         2.500         5.000         5.000         1.000         5.000         3.750         5.000         5.000         5.000
2.500         1.250         1.000         3.750         5.000         2.500         4.375         5.000         3.000         3.000         3.750         2.750         3.000         2.750
2.500         2.500         1.000         3.750         5.000         1.250         4.375         4.000         1.000         5.000         3.750         5.000         5.000         3.750
2.500         1.250         1.000         3.750         3.000         3.750         3.375         3.000         1.000         3.000         3.750         3.750         3.000         2.500
1.250         3.750         1.000         5.000         5.000         5.000         5.000         5.000         3.000         5.000         1.250         3.750         3.000         5.000
3.750         5.000         1.000         3.750         5.000         3.750         4.375         4.000         3.000         5.000         5.000         5.000         5.000         5.000
3.750         1.250         3.000         3.750         3.000         5.000         3.375         2.000         1.000         5.000         3.750         3.750         5.000         3.750
2.500         2.500         1.000         3.750         1.000         1.250         2.375         5.000         3.000         5.000         5.000         5.000         5.000         5.000
2.500         5.000         1.000         3.750         2.000         1.250         2.875         5.000         3.000         5.000         1.250         2.500         5.000         3.750
1.250         1.250         1.000         3.750         1.000         1.250         2.375         3.000         1.000         3.000         3.750         3.750         3.000         2.500
1.250         2.500         1.000         3.750         5.000         1.250         4.375         2.000         1.000         3.000         2.500         5.000         5.000         2.500


我把以上的四个m文件和数据写好保存后,在command window 里输入这命令:
cwprint('sj.txt',12,14)

结果为:
>> cwprint('sj.txt',12,14)

fid =

     3

标准化结果如下:

v1 =

  Columns 1 through 11 

    0.0738    0.0706    0.0850    0.0876    0.1084    0.0854    0.0213    0.0771    0.1216    0.1053    0.0690
    0.1476    0.0882    0.1133    0.0876    0.0991    0.1068    0.1064    0.1028    0.1216    0.1053    0.1149
    0.0295    0.0588    0.1133    0.1095    0.0248    0.0961    0.1064    0.0206    0.0912    0.1404    0.1149
    0.1107    0.0882    0.1133    0.0803    0.1238    0.0854    0.1064    0.0771    0.0304    0.1053    0.1149
    0.0886    0.0235    0.0567    0.0876    0.0929    0.0285    0.1064    0.1028    0.0729    0.0702    0.1149
    0.0369    0.1176    0.0283    0.0803    0.1238    0.0854    0.1064    0.0771    0.0912    0.0702    0.1149
    0.0996    0.1176    0.0227    0.0730    0.1238    0.1068    0.0638    0.0900    0.0729    0.0281    0.0575
    0.0886    0.0588    0.0850    0.0730    0.0929    0.1068    0.1064    0.0823    0.1216    0.1053    0.1149
    0.0295    0.1176    0.1133    0.0292    0.0619    0.0854    0.0266    0.0617    0.0821    0.0281    0.0230
    0.1476    0.1176    0.0567    0.1095    0.0310    0.0712    0.0798    0.1028    0.0486    0.0351    0.0862
    0.0738    0.0235    0.0992    0.1460    0.0248    0.0356    0.0638    0.1028    0.0243    0.0667    0.0460
    0.0738    0.1176    0.1133    0.0365    0.0929    0.1068    0.1064    0.1028    0.1216    0.1404    0.0287

  Columns 12 through 14 

    0.0807    0.0352    0.0275
    0.1404    0.0441    0.1031
    0.0842    0.0837    0.1375
    0.1404    0.1057    0.0344
    0.0351    0.0352    0.1203
    0.0702    0.1057    0.0550
    0.1404    0.1322    0.0275
    0.1053    0.1322    0.0825
    0.0351    0.1057    0.0687
    0.0351    0.0881    0.1375
    0.0281    0.0441    0.1375
    0.1053    0.0881    0.0687

相关系数矩阵:
Warning: Function call CORRCOEF invokes inexact match F:\MATLAB7.0\toolbox\matlab\datafun\corrcoef.m.

> In cwfac at 4
  In cwprint at 8

std =

  Columns 1 through 11 

    1.0000    0.0638   -0.0806    0.2281    0.1287    0.0270    0.2182    0.6624   -0.1375   -0.1155    0.2525
    0.0638    1.0000   -0.1964   -0.6001    0.3055    0.6288   -0.1146   -0.0013    0.1744   -0.2616   -0.2972
   -0.0806   -0.1964    1.0000   -0.1058   -0.3356    0.1446    0.0070   -0.2578    0.1128    0.5731   -0.1628
    0.2281   -0.6001   -0.1058    1.0000   -0.4877   -0.5257    0.0931    0.0562   -0.4951   -0.0033    0.3438
    0.1287    0.3055   -0.3356   -0.4877    1.0000    0.3655    0.1274    0.2208    0.3220    0.0587    0.2072
    0.0270    0.6288    0.1446   -0.5257    0.3655    1.0000    0.1069   -0.2922    0.6130    0.3293   -0.0009
    0.2182   -0.1146    0.0070    0.0931    0.1274    0.1069    1.0000    0.0722    0.0574    0.4844    0.6592
    0.6624   -0.0013   -0.2578    0.0562    0.2208   -0.2922    0.0722    1.0000   -0.1139   -0.2771   -0.1723
   -0.1375    0.1744    0.1128   -0.4951    0.3220    0.6130    0.0574   -0.1139    1.0000    0.4732    0.0508
   -0.1155   -0.2616    0.5731   -0.0033    0.0587    0.3293    0.4844   -0.2771    0.4732    1.0000    0.3017
    0.2525   -0.2972   -0.1628    0.3438    0.2072   -0.0009    0.6592   -0.1723    0.0508    0.3017    1.0000
    0.3349    0.2973    0.1006   -0.2699    0.6324    0.7482    0.3395   -0.0285    0.3279    0.4075    0.2598
   -0.1455    0.5681   -0.2484   -0.4476    0.2375    0.5711    0.1392   -0.2622   -0.0131   -0.2065   -0.0342
    0.1074   -0.4785    0.1944    0.5766   -0.8342   -0.4825    0.2963    0.0267   -0.2414    0.0337    0.1773

  Columns 12 through 14 

    0.3349   -0.1455    0.1074
    0.2973    0.5681   -0.4785
    0.1006   -0.2484    0.1944
   -0.2699   -0.4476    0.5766
    0.6324    0.2375   -0.8342
    0.7482    0.5711   -0.4825
    0.3395    0.1392    0.2963
   -0.0285   -0.2622    0.0267
    0.3279   -0.0131   -0.2414
    0.4075   -0.2065    0.0337
    0.2598   -0.0342    0.1773
    1.0000    0.3506   -0.5468
    0.3506    1.0000   -0.3907
   -0.5468   -0.3907    1.0000

特征向量(vec)及特征值(val):

vec =

  Columns 1 through 11 

    0.0569   -0.3132    0.0651   -0.4370    0.1926   -0.1698   -0.2517    0.2366    0.1174    0.3944    0.2736
   -0.2793   -0.0197   -0.0952    0.1226    0.0727    0.6928   -0.2404    0.0925   -0.1564    0.3707   -0.0770
   -0.0971   -0.1607    0.0461    0.4430    0.0891   -0.1399   -0.3459   -0.2790    0.3209    0.3150    0.3486
   -0.1099   -0.3142    0.0427    0.4051    0.1527    0.2380    0.4081    0.4166    0.3132   -0.0104   -0.1454
    0.1716   -0.4576   -0.4861    0.2027   -0.0686    0.0399   -0.1101   -0.1890    0.0879   -0.4507    0.0946
    0.7102    0.1526    0.0035    0.2128   -0.0197   -0.0437    0.1487    0.3443    0.0028    0.2798   -0.0256
    0.1192   -0.2575    0.4247    0.0416   -0.2125    0.1780    0.1126   -0.4650   -0.3029    0.1492   -0.2583
   -0.0284    0.4001   -0.0513    0.3722    0.1990   -0.0569    0.2825   -0.2418   -0.2320    0.1090    0.4530
   -0.3416   -0.2401    0.1642    0.1159    0.0387   -0.2279    0.0662    0.3978   -0.5674   -0.1788    0.2714
   -0.0204    0.1254   -0.2935   -0.3795    0.4428    0.3132    0.2868   -0.1325    0.0344   -0.0647    0.1751
   -0.0735    0.4000   -0.0372    0.2086    0.2336   -0.0731   -0.5244    0.1749   -0.0395   -0.2079   -0.3610
   -0.4092    0.2581   -0.0504   -0.0588   -0.5598   -0.0767    0.2029    0.0821    0.3883    0.0928    0.0580
   -0.2418   -0.1251   -0.1605    0.0441    0.3966   -0.4532    0.2508   -0.1931    0.0289    0.2797   -0.4983
    0.0068   -0.0468   -0.6485    0.0260   -0.3372   -0.0993   -0.0137    0.0680   -0.3621    0.3548   -0.0930

  Columns 12 through 14 

   -0.5125    0.1048    0.0174
   -0.0324   -0.2560   -0.3338
    0.3911    0.2526    0.0286
   -0.1590    0.1572    0.3659
   -0.2941    0.0098   -0.3510
    0.1107    0.1222   -0.4219
   -0.2217    0.4480   -0.0322
   -0.4772   -0.1167    0.0675
    0.1800    0.1939   -0.2676
    0.2221    0.5162   -0.0885
   -0.2590    0.4261    0.0196
   -0.1734    0.2630   -0.3616
   -0.0043   -0.1391   -0.2976
    0.0588    0.1774    0.3842


val =

  Columns 1 through 11 

   -0.0000         0         0         0         0         0         0         0         0         0         0
         0    0.0000         0         0         0         0         0         0         0         0         0
         0         0    0.0000         0         0         0         0         0         0         0         0
         0         0         0    0.0634         0         0         0         0         0         0         0
         0         0         0         0    0.1152         0         0         0         0         0         0
         0         0         0         0         0    0.2863         0         0         0         0         0
         0         0         0         0         0         0    0.3540         0         0         0         0
         0         0         0         0         0         0         0    0.6383         0         0         0
         0         0         0         0         0         0         0         0    0.8142         0         0
         0         0         0         0         0         0         0         0         0    1.1478         0
         0         0         0         0         0         0         0         0         0         0    1.4467
         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0

  Columns 12 through 14 

         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
    2.2412         0         0
         0    2.6495         0
         0         0    4.2433

特征根排序:
4.24333
2.64954
2.24115
1.44671
1.14778
0.814231
0.638349
0.353996
0.286287
0.1152
0.0634209
8.92824e-016
1.73663e-017
-2.02423e-016

贡献率:

newrate =

  Columns 1 through 11 

    0.3031    0.1893    0.1601    0.1033    0.0820    0.0582    0.0456    0.0253    0.0204    0.0082    0.0045

  Columns 12 through 14 

    0.0000    0.0000   -0.0000

主成分数:6

主成分载荷:
    0.0358    0.1705   -0.7673    0.3291    0.4226    0.1059
   -0.6877   -0.4167   -0.0485   -0.0926    0.3972   -0.1412
    0.0589    0.4111    0.5855    0.4193    0.3375    0.2896
    0.7538    0.2559   -0.2381   -0.1749   -0.0111    0.2826
   -0.7230    0.0159   -0.4403    0.1138   -0.4828    0.0793
   -0.8690    0.1989    0.1658   -0.0307    0.2998    0.0025
   -0.0663    0.7292   -0.3319   -0.3107    0.1598   -0.2733
    0.1390   -0.1900   -0.7144    0.5448    0.1168   -0.2093
   -0.5513    0.3156    0.2694    0.3265   -0.1916   -0.5120
   -0.1823    0.8402    0.3325    0.2106   -0.0694    0.0310
    0.0404    0.6937   -0.3877   -0.4343   -0.2227   -0.0357
   -0.7449    0.4281   -0.2596    0.0698    0.0994    0.3504
   -0.6131   -0.2264   -0.0064   -0.5994    0.2996    0.0261
    0.7913    0.2887    0.0880   -0.1119    0.3801   -0.3267

计算得分:

score =

   -0.2615    0.2693   -0.1046    0.0965    0.0557   -0.0072    0.0482    7.0000
   -0.2714    0.4247   -0.2112    0.0874    0.1580   -0.0282    0.1593    3.0000
   -0.1323    0.4315   -0.0138   -0.0396    0.1420   -0.0322    0.3556    2.0000
   -0.3231    0.3550   -0.2082    0.0069    0.1310    0.0439    0.0055    8.0000
   -0.0292    0.3197   -0.2020    0.0246    0.0729   -0.0613    0.1246    4.0000
   -0.3095    0.2608   -0.1780   -0.0505    0.0744   -0.0562   -0.2590   11.0000
   -0.4019    0.1732   -0.2367   -0.0091    0.1239    0.0001   -0.3505   12.0000
   -0.3085    0.3744   -0.1534   -0.0035    0.1276   -0.0420   -0.0055    9.0000
   -0.2493    0.1121   -0.0162    0.0251    0.1428   -0.0368   -0.0224   10.0000
   -0.0661    0.2201   -0.2199   -0.0050    0.2093   -0.0515    0.0870    5.0000
    0.1007    0.2527   -0.1187    0.0383    0.1420   -0.0084    0.4066    1.0000
   -0.3663    0.3214   -0.0902    0.0884    0.1555   -0.0508    0.0581    6.0000
  • 17
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值