主成分分析matlab程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab 编程实现主成分分析
.程序结构及函数作用
在软件Matlab 中实现主成分分析可以采取两种方式实现:一是通过编程来实现;二是直接调用Matlab 种自带程序实现。
下面主要主要介绍利用Matlab 的矩阵计算功能编程实现主成分分析。
1程序结构
主函数
子函数
2函数作用
Cwstd.m——用总和标准化法标准化矩阵
Cwfac.m——计算相关系数矩阵;计算特征值和特征向量;对主成分进行排序;计算各特征值贡献率;挑选主成分(累计贡献率大于85%),输出主成分个数;计算主成分载荷
Cwscore.m——计算各主成分得分、综合得分并排序
Cwprint.m——读入数据文件;调用以上三个函数并输出结果
3.源程序
3.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
3.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.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为排序结果
3.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);
4.程序测试例题
4.1原始数据
中国大陆35个大城市某年的10项社会经济统计指标数据见下表。
691.23 0.40
6 8
1 853
210
5 966
343
4
810
9
532
357
096
4 803
744
102.6
3
884
447
927.09 0.46
2 7
2 663
855
4 186
123
6
720
7
520
481
443
6 450
020
172.7
9
1 309
151
1 313.1
2 0.73
8 4
2 069
019
54 529
098
6
406
44
485
4 318
500
25 971
200
336.8
4
5 605
445
537.44 0.53
4 1
989
199
13 072
737
14
269
11
193
664
299
5 680
472
113.8
1
1 357
861
616.05 0.35
5 6
1 414
737
12 000
796
17
883
11
684
449
593
7 425
967
96.90
1 180
947
538.41 0.25
4 7
1 428
235
10 622
866
22
215
10
298
501
723
5 246
350
62.15
824
034
429.95 0.31
8 4
628
764
2 514
125
4
893
1
517
233
628
1 622
931
47.27
369
577
583.13 0.27
3 3
2 152
288
6 555
351
8
851
7
190
467
524
5 030
220
69.59
680
607
128.99 0.48
6 5
333
374
5 751
124
3
728
2
570
418
758
2 108
331
46.93
657
484
424.20 0.39
8 8
688
289
2 305
881
3
674
3
189
167
714
2 640
460
62.08
479 ,55
5
557.63 0.40
8 5
1 486
302
6 285
882
5
915
11
775
460
690
4 126
970
83.31
756
696
702.97 0.36
9 3
2 382
320
11 492
036
13
408
17
038
658
435
4 978
045
103.5
2
961
704
615.36 0.34
2 4
677
425
5 287
601
10
433
6
768
387
252
5 135
338
84.66
696
848
740.20 0.58
6 9
1 211
291
7 506
085
9
793
15
442
604
658
5 748
055
149.2
1 314
766
582.47 0.31
0 7
1 146
367
3 098
179
8
706
5
718
323
660
3 461
244
69.57
596
986
685.00 0.62
1 4
1 600
738
23 348
139
22
007
23
854
1 761
499
20 401
811
182.8
1
3 047
594
119.85 0.79
3 1
299
662
20 368
295
8
754
4
274
1 847
908
9 519
900
91.26
1 890
338
285.87 0.40
6 4
720
486
1 149
691
5
130
3
293
149
700
2 190
918
45.09
371
809
54.38 0.83
5 4
44 815
717
461
5
345
2
356
115
174
1 626
800
19.01
198
138
3 072.3
4 0.20
6 7
4 168
780
8 585
525
52
441
25
124
898,91
2
9 090
969
223.7
3
1 606
804
4.2运行结果
>> cwprint('cwbook.txt',35,10)
fid =
6
数据标准化结果如下:
v1 =
0.0581 0.0356 0.0435 0.0680 0.0557 0.1112 0.1194 0.1184 0.1083 0.1392
0.0423 0.0346 0.0354 0.0770 0.0089 0.0642 0.0483 0.0499 0.0534 0.0544
0.0407 0.0139 0.0688 0.0234 0.0080 0.0047 0.0151 0.0314 0.0252 0.0183
0.0139 0.0391 0.0056 0.0093 0.0053 0.0290 0.0087 0.0174 0.0234 0.0158
0.0097 0.0263 0.0086 0.0028 0.0064 0.0064 0.0045 0.0062 0.0111 0.0075
0.0315 0.0375 0.0305 0.0198 0.0213 0.0376 0.0243 0.0398 0.0357 0.0278
0.0253 0.0295 0.0443 0.0286 0.0295 0.0468 0.0304 0.0334 0.0248 0.0233
0.0321 0.0242 0.0437 0.0203 0.0132 0.0233 0.0153 0.0212 0.0270 0.0213
0.0431 0.0276 0.0628 0.0142 0.0184 0.0184 0.0206 0.0285 0.0455 0.0316
0.0610 0.0440 0.0488 0.1853 0.0176 0.1086 0.1848 0.1148 0.0888 0.1352
0.0250 0.0318 0.0233 0.0444 0.0391 0.0273 0.0284 0.0251 0.0300 0.0327
0.0286 0.0212 0.0334 0.0408 0.0490 0.0285 0.0192 0.0328 0.0255 0.0285
0.0250 0.0152 0.0337 0.0361 0.0609 0.0251 0.0215 0.0232 0.0164 0.0199
0.0200 0.0190 0.0148 0.0085 0.0134 0.0037 0.0100 0.0072 0.0125 0.0089
0.0271 0.0163 0.0508 0.0223 0.0243 0.0175 0.0200 0.0222 0.0183 0.0164
0.0060 0.0290 0.0079 0.0195 0.0102 0.0063 0.0179 0.0093 0.0124 0.0159
0.0197 0.0237 0.0162 0.0078 0.0101 0.0078 0.0072 0.0117
0.0164 0.0116
0.0259 0.0243 0.0350 0.0214 0.0162 0.0287 0.0197 0.0182 0.0220 0.0182
0.0327 0.0220 0.0562 0.0391 0.0367 0.0416 0.0282 0.0220 0.0273 0.0232
0.0286 0.0204 0.0160 0.0180 0.0286 0.0165 0.0166 0.0227 0.0223 0.0168
0.0344 0.0349 0.0286 0.0255 0.0268 0.0377 0.0259 0.0254 0.0393 0.0317
0.0271 0.0185 0.0270 0.0105 0.0239 0.0140 0.0139 0.0153 0.0183 0.0144
0.0318 0.0370 0.0377 0.0793 0.0603 0.0582 0.0754 0.0901 0.0482 0.0735
0.0056 0.0472 0.0071 0.0692 0.0240 0.0104 0.0791 0.0421 0.0240 0.0456
0.0133 0.0242 0.0170 0.0039 0.0141 0.0080 0.0064 0.0097 0.0119 0.0090
0.0025 0.0497 0.0011 0.0024 0.0146 0.0057 0.0049 0.0072 0.0050 0.0048
0.1428 0.0123 0.0983 0.0292 0.1437 0.0613 0.0385 0.0402 0.0590 0.0387
0.0466 0.0199 0.0456 0.0200 0.1100 0.0479 0.0240 0.0331 0.0350 0.0290
0.0149 0.0271 0.0085 0.0076 0.0430 0.0101 0.0085 0.0079 0.0146 0.0101
0.0220 0.0230 0.0187 0.0123 0.0154 0.0294 0.0224 0.0182 0.0232 0.0203
0.0313 0.0244 0.0174 0.0125 0.0283 0.0238 0.0175 0.0259 0.0300 0.0213
0.0134 0.0324 0.0061 0.0100 0.0050 0.0116 0.0073 0.0117 0.0173 0.0133
0.0062 0.0311 0.0016 0.0024 0.0048 0.0036 0.0021 0.0038 0.0072 0.0053
0.0044 0.0340 0.0040 0.0022 0.0058 0.0029 0.0032 0.0036 0.0063 0.0043
0.0074 0.0491 0.0019 0.0063 0.0073 0.0221 0.0109 0.0105 0.0146 0.0125
相关系数矩阵:
std =
1.0000 -0.3444 0.8425 0.3603 0.7390 0.6215 0.4039 0.4967 0.6761 0.4689
-0.3444 1.0000 -0.4750 0.3096 -0.3539 0.1971 0.3571 0.2600 0.1570 0.3090
0.8425 -0.4750 1.0000 0.3358 0.5891 0.5056 0.3236 0.4456 0.5575 0.3742
0.3603 0.3096 0.3358 1.0000 0.1507 0.7664 0.9412 0.8480 0.7320 0.8614
0.7390 -0.3539 0.5891 0.1507 1.0000 0.4294 0.1971 0.3182 0.3893 0.2595
0.6215 0.1971 0.5056 0.7664 0.4294 1.0000 0.8316 0.8966 0.9302 0.9027
0.4039 0.3571 0.3236 0.9412 0.1971 0.8316 1.0000 0.9233 0.8376 0.9527
0.4967 0.2600 0.4456 0.8480 0.3182 0.8966 0.9233 1.0000 0.9201 0.9731
0.6761 0.1570 0.5575 0.7320 0.3893 0.9302 0.8376 0.9201
1.0000 0.9396
0.4689 0.3090 0.3742 0.8614 0.2595 0.9027 0.9527 0.9731 0.9396 1.0000
特征向量(vec):
vec =
-0.1367 0.2282 -0.2628 0.1939 0.6371 -0.2163 0.3176 -0.1312 -0.4191 0.2758
-0.0329 -0.0217 0.0009 0.0446 -0.1447 -0.4437 0.4058 -0.5562 0.5487 0.0593
-0.0522 -0.0280 0.2040 -0.0492 -0.5472 -0.4225 0.3440 0.3188 -0.4438 0.2401 0.0067 -0.4176 -0.2856 -0.2389 0.1926 -0.4915 -0.4189 0.2726 0.2065 0.3403 0.0404 0.1408 0.0896 0.0380 -0.1969 -0.0437 -0.4888 -0.6789 -0.4405 0.1861
-0.0343 0.2360 0.0640 -0.8294 0.0377 0.2662 0.1356 -0.1290 0.0278 0.3782
0.2981 0.4739 0.5685 0.2358 0.1465 -0.1502 -0.2631 0.1245 0.2152 0.3644
0.1567 0.3464 -0.6485 0.2489 -0.4043 0.2058 -0.0704 0.0462 0.1214 0.3812
0.4879 -0.5707 0.1217 0.1761 0.0987 0.3550 0.3280 -0.0139 0.0071 0.3832
-0.7894 -0.1628 0.1925 0.2510 -0.0422 0.2694 0.0396 0.0456
0.1668 0.3799
特征值(val)
val =
0.0039 0 0 0 0 0 0 0 0 0
0 0.0240 0 0 0 0 0 0 0 0
0 0 0.0307 0 0 0 0 0 0 0
0 0 0 0.0991 0 0 0 0 0 0
0 0 0 0 0.1232 0 0 0 0 0
0 0 0 0 0 0.2566 0 0 0 0
0 0 0 0 0 0 0.3207 0 0 0
0 0 0 0 0 0 0 0.5300 0 0
0 0 0 0 0 0 0 0 2.3514 0
0 0 0 0 0 0 0 0 0 6.2602
特征根排序:
6.26022
2.35138
0.530047
0.320699
0.256639
0.123241
0.0990915
0.0307088
0.0240355
0.00393387
各主成分贡献率:
newrate =
0.6260 0.2351 0.0530 0.0321 0.0257 0.0123 0.0099 0.0031 0.0024 0.0004
第一、二主成分的载荷:
0.690 1 -0.6427
0.148 3 0.8414
0.600 7 -0.6805
0.851 5 0.3167
0.465 6 -0.6754
0.946 3 0.0426
0.911 7 0.3299
0.953 7 0.1862
0.958 9 0.0109
0.950 6 0.2558
第一、二、三、四主成分的得分:
score =
0.718 5 0.049 9 0.768 4 2.0000
0.380 6 0.038 6 0.419 2 4.0000
0.184 8 -0.043 3 0.141 4 21.0000 0.118 6 0.031 1 0.149 7 20.0000 0.054 9 0.011 5 0.066 4 33.0000 0.228 8 0.007 0 0.235 8 7.000 0 0.2364 -0.0081 0.2283 10.0000 0.1778 -0.0167 0.1611 16.0000 0.2292 -0.0337 0.1955 14.0000 0.8382 0.1339 0.9721 1.0000 0.2276 0.0064 0.2340 8.0000 0.2279 -0.0222 0.2056 12.0000 0.1989 -0.0382 0.1607 18.0000 0.0789 -0.0061 0.0728 32.0000 0.1711 -0.0317 0.1394 23.0000 0.0926 0.0266 0.1192 25.0000 0.0900 -0.0000 0.0899 28.0000 0.1692 -0.0082 0.1610 17.0000 0.2441 -0.0318 0.2124 11.0000 0.1507 -0.0108 0.1399 22.0000 0.2316 0.0012 0.2328 9.0000 0.1294 -0.0211 0.1083 27.0000 0.4716 0.0328 0.5045 3.0000
0.2737 0.0834 0.3570 5.0000 0.0754 -0.0013 0.0741 31.0000 0.0448 0.0349 0.0797 30.0000 0.4759 -0.2028 0.2731 6.0000 0.2907 -0.0883 0.2024 13.0000 0.0944 -0.0118 0.0826 29.0000 0.1546 0.0035 0.1581 19.0000 0.1718 -0.0092 0.1626 15.0000 0.0865 0.0230 0.1095 26.0000 0.0349 0.0216 0.0566 35.0000 0.0343 0.0228 0.0572 34.0000 0.0889 0.0422 0.1310 24.0000。