用Matlab软件实现聚类分析
例 下表是1999年中国省、自治区的城市规模结构特征的一些数据,可通过聚类分析将这些省、自治区进行分类,具体过程如下:
省、自治区 | 首位城市规模(万人) | 城市首位度 | 四城市指数 | 基尼系数 | 城市规模中位值(万人) |
京津冀 | 699.70 | 1.437 1 | 0.936 4 | 0.780 4 | 10.880 |
山西 | 179.46 | 1.898 2 | 1.000 6 | 0.587 0 | 11.780 |
内蒙古 | 111.13 | 1.418 0 | 0.677 2 | 0.515 8 | 17.775 |
辽宁 | 389.60 | 1.918 2 | 0.854 1 | 0.576 2 | 26.320 |
吉林 | 211.34 | 1.788 0 | 1.079 8 | 0.456 9 | 19.705 |
黑龙江 | 259.00 | 2.305 9 | 0.341 7 | 0.507 6 | 23.480 |
苏沪 | 923.19 | 3.735 0 | 2.057 2 | 0.620 8 | 22.160 |
浙江 | 139.29 | 1.871 2 | 0.885 8 | 0.453 6 | 12.670 |
安徽 | 102.78 | 1.233 3 | 0.532 6 | 0.379 8 | 27.375 |
福建 | 108.50 | 1.729 1 | 0.932 5 | 0.468 7 | 11.120 |
江西 | 129.20 | 3.245 4 | 1.193 5 | 0.451 9 | 17.080 |
山东 | 173.35 | 1.001 8 | 0.429 6 | 0.450 3 | 21.215 |
河南 | 151.54 | 1.492 7 | 0.677 5 | 0.473 8 | 13.940 |
湖北 | 434.46 | 7.132 8 | 2.441 3 | 0.528 2 | 19.190 |
湖南 | 139.29 | 2.350 1 | 0.836 0 | 0.489 0 | 14.250 |
广东 | 336.54 | 3.540 7 | 1.386 3 | 0.402 0 | 22.195 |
广西 | 96.12 | 1.228 8 | 0.638 2 | 0.500 0 | 14.340 |
海南 | 45.43 | 2.191 5 | 0.864 8 | 0.413 6 | 8.730 |
川渝 | 365.01 | 1.680 1 | 1.148 6 | 0.572 0 | 18.615 |
云南 | 146.00 | 6.633 3 | 2.378 5 | 0.535 9 | 12.250 |
贵州 | 136.22 | 2.827 9 | 1.291 8 | 0.598 4 | 10.470 |
西藏 | 11.79 | 4.151 4 | 1.179 8 | 0.611 8 | 7.315 |
陕西 | 244.04 | 5.119 4 | 1.968 2 | 0.628 7 | 17.800 |
甘肃 | 145.49 | 4.751 5 | 1.936 6 | 0.580 6 | 11.650 |
青海 | 61.36 | 8.269 5 | 0.859 8 | 0.809 8 | 7.420 |
宁夏 | 47.60 | 1.507 8 | 0.958 7 | 0.484 3 | 9.730 |
新疆 | 128.67 | 3.853 5 | 1.621 6 | 0.490 1 | 14.470 |
在MATLAB中写一个名为ids_province的M文件:
clear
clc
x=[699.70 1.4371 0.9364 0.7804 10.880;179.46 1.8982 1.0006 0.5870 11.780;111.13 1.4180 0.6772 0.5158 17.775....
;389.60 1.9182 0.8541 0.5762 26.320;211.34 1.7880 1.0798 0.4569 19.705;259.00 2.3059 0.3417 0.5076 23.480....
;923.19 3.7350 2.0572 0.6208 22.160;139.29 1.8712 0.8858 0.4536 12.670;102.78 1.2333 0.5326 0.3798 27.375....
;108.50 1.7291 0.9325 0.4687 11.120;129.20 3.2454 1.1935 0.4519 17.080;173.35 1.0018 0.4296 0.4503 21.215....
;151.54 1.4927 0.6775 0.4738 13.940;434.46 7.1328 2.4413 0.5282 19.190;139.29 2.3501 0.8360 0.4890 14.250....
;336.54 3.5407 1.3863 0.4020 22.195;96.120 1.2288 0.6382 0.5000 14.340;45.430 2.1915 0.8648 0.4136 8.730....
;365.01 1.6801 1.1486 0.5720 18.615;146.00 6.6333 2.3785 0.5359 12.250;136.22 2.8279 1.2918 0.5984 10.470....
;11.790 4.1514 1.1798 0.6118 7.3150;244.04 5.1194 1.9682 0.6287 17.800;145.49 4.7515 1.9366 0.5806 11.650....
;61.360 8.2695 0.8598 0.8098 7.4200;47.600 1.5078 0.9587 0.4843 9.7300;128.67 3.8535 1.6216 0.4901 14.470]
y=pdist(x); %计算距离的函数
yy=squareform(y); %将样本点之间的距离用矩阵的形式输出
z=linkage(y) %创建系统聚类树
h=dendrogram(z) %输出聚类树形图的冰状图
分步聚类,选择合适的计算距离法:
y1=pdist(x);
y2=pdist(x,'seuclid');
y3=pdist(x,'mahal');
y4=pdist(x,'cityblock'); %对于不同的距离,利用pdist函数计算出样本点之间的距离
z1=linkage(y1);
z2=linkage(y2);
z3=linkage(y3);
z4=linkage(y4); %分别创建聚类树
t1=cophenet(z1,y1)
t2=cophenet(z2,y2)
t3=cophenet(z3,y3)
t4=cophenet(z4,y4) %利用cophenet函数计算聚类树信息与原始数据的距离之间的相关性
%运行ids_province.m文件
t1 =
0.9259
t2 =
0.7911
t3 =
0.8315
t4 =
0.9207
%选择具有最大的cophenet值的距离进行分类,即选用欧氏距离最合适
%输入:
y1=pdist(x);
z1=linkage(y1)
%运行得
z1 =
8.0000 15.0000 1.6521
20.0000 24.0000 2.0877
18.0000 26.0000 2.4880
11.0000 27.0000 2.7654
21.0000 28.0000 3.9199
29.0000 32.0000 6.9926
3.0000 10.0000 7.1673
13.0000 33.0000 7.3528
31.0000 35.0000 8.6125
2.0000 12.0000 11.2916
9.0000 34.0000 12.7262
17.0000 38.0000 12.8051
25.0000 30.0000 15.5084
6.0000 23.0000 16.3291
36.0000 39.0000 18.0388
37.0000 42.0000 22.9979
4.0000 19.0000 25.7717
16.0000 44.0000 28.7559
5.0000 43.0000 32.8508
41.0000 46.0000 32.9368
22.0000 40.0000 33.7288
47.0000 48.0000 36.1367
14.0000 45.0000 45.7490
49.0000 50.0000 77.5676
1.0000 7.0000 223.7891
51.0000 52.0000 265.4356
%由w=inconsistent(z)确定cluster的阀值
%输入:
w=inconsistent(z)
%运行得:
w =
1.6521 0 1.0000 0
2.0877 0 1.0000 0
2.4880 0 1.0000 0
2.7654 0 1.0000 0
2.7860 1.6036 2.0000 0.7071
4.3334 2.4785 3.0000 1.0729
7.1673 0 1.0000 0
7.1727 0.2547 2.0000 0.7071
6.2436 3.0773 3.0000 0.7698
11.2916 0 1.0000 0
9.9467 3.9307 2.0000 0.7071
12.7656 0.0558 2.0000 0.7071
8.9982 9.2068 2.0000 0.7071
16.3291 0 1.0000 0
13.1521 4.7227 3.0000 1.0347
17.4428 5.8759 3.0000 0.9454
25.7717 0 1.0000 0
27.2638 2.1102 2.0000 0.7071
27.9244 6.9670 2.0000 0.7071
27.3723 9.5637 3.0000 0.5818
24.6186 12.8838 2.0000 0.7071
34.2674 1.6665 3.0000 1.1216
37.2525 12.0159 2.0000 0.7071
53.1511 21.6846 3.0000 1.1260
223.7891 0 1.0000 0
188.9308 98.6658 3.0000 0.7754
%创建分类:
b1=cluster(z1,0.8)
%运行得:
b1 =
11
4
8
10
5
6
11
7
8
8
3
4
2
10
7
10
8
9
10
1
7
9
6
1
9
9
3