主要介绍系统聚类分析方法。系统聚类分析法是聚类分析中应用最为普遍的一种方法。
它的基本原理是:首先将必定数量的样品或者指标各自当作一类,而后根据样品(或者指标)的亲疏程度,将亲疏程度最高的两类进行合并。而后考虑合并后的类与其余类之间的亲疏程度,再进行合并。重复这一过程,直至将全部的样品(或者指标)合并为一类。
系统聚类分析用到的函数:
web
在生产实际中常常遇到给产品等级进行分类的问题,如一等品、二等品等,在生物学中,要根据生物的特征进行分类;在考古时要对古生物化石进行科学分类;在球类比赛中常常要对各球队进行分组如何肯定种子队,这些问题就是聚类分析问题。随着科学技术的发展,咱们利用已知数据首先提取数据特征,而后借助计算机依据这些特征进行分类,聚类的依据在于各种别之间的接近程度如何计量,一般采起距离与类似系数进行衡量。svg
设有n个样品的p元观测数据:
这时,每一个样品可当作p元空间的一个点,每两个点之间的距离记为d(xi,xj)知足条件:
距离计算:
例题:
为了研究辽宁、浙江、河南、甘肃、青海5省1991年城镇居民生活消费规律,须要利用调查资料对五个省进行分类,指标变量共8个,意义以下:x1:人均粮食支出,x2:人均副食支出;x3:人均烟酒茶支出,x4:人均其余副食支出,x5:人均衣着商品支出,x6:人均日用品支出,x7:人均燃料支出,x8人均非商品支出。
题目中给的数据都是有关系的。函数
a=[7.9 39.77 8.49 12.94 19.27 11.05 2.04 13.29 7.68 50.37 11.35 13.3 19.25 14.59 2.75 14.87 9.42 27.93 8.2 8.14 16.17 9.42 1.55 9.76 9.16 27.98 9.01 9.32 15.99 9.1 1.82 11.35 10.06 28.64 10.52 10.05 16.18 8.39 1.96 10.81]; d1=pdist(a);% 此时计算出各行之间的欧氏距离,为了获得书中的距离矩阵,咱们键入命令: D= squareform(d1), % 注意此时d1必须是一个行向量,结果是实对称矩阵 %若想获得书中的三角阵,则有命令: S = tril(squareform(d1)) d2=pdist(a,'cityblock'); S2 = tril(squareform(d2)) d3=pdist(a,'minkowski',3); S3 = tril(squareform(d3))
结果以下:
例:表1.1 式1999年中国省(自治区、直辖市)的城市规模结构特征的一些数据,试经过聚类分析将这些省(自治区、直辖市)进行分类。
2.基本假设
1.假设图表中的数据通过彻底统计;
2.假设本题中考虑的指标变量相互之间无联系。code
clc,clear fid=fopen('str801.txt','r'); ss=textscan(fid,'%s'); a=load('data801.txt'); b=zscore(a); d=pdist(b); z=linkage(d); dendrogram(z,'label',ss{:})
当对p个指标变量进行聚类时,用类似系数来衡量变量之间的类似程度(关联度),若用 表示变量之间的类似系数,则应知足:
类似系数中最经常使用的是相关系数与夹角余弦。orm
a=[7.9 39.77 8.49 12.94 19.27 11.05 2.04 13.29 7.68 50.37 11.35 13.3 19.25 14.59 2.75 14.87 9.42 27.93 8.2 8.14 16.17 9.42 1.55 9.76 9.16 27.98 9.01 9.32 15.99 9.1 1.82 11.35 10.06 28.64 10.52 10.05 16.18 8.39 1.96 10.81]; R=corrcoef(a);% 指标之间的相关系数 a1=normc(a); % 将a的各列化为单位向量 J=a1'*a1 % 计算a中各列之间的夹角余弦
结果以下:
xml
谱系聚类法是目前应用较为普遍的一种聚类法。谱系聚类是根据生物分类学的思想对研究对象进行分类的方法。在生物分类学中,分类的单位是:门、纲、目、科、属、种。其中种是分类的基本单位,分类单位越小,它所包含的生物就越少,生物之间的共同特征就越多。利用这种思想,谱系聚类首先将各样品自成一类,而后把最类似(距离最近或类似系数最大)的样品聚为小类,再将已聚合的小类按各种之间的类似性(用类间距离度量)进行再聚合,随着类似性的减弱,最后将一切子类都聚为一大类,从而获得一个按类似性大小聚结起来的一个谱系图。
聚类分析的基本思想是认为咱们所研究的样本或指标(变量)之间存在着程度不一样的类似性(亲疏关系)。因而根据一批样本的多个观测指标,具体找出一些彼此之间类似程度较大的样本(或指标)聚合为一类,把另一些彼此之间类似程度较大的样本(或指标)又聚合为另外一类,关系密切的聚合到一个小的分类单位,关系疏远的聚合到一个大的分类单位,直到把全部样本(或指标)都聚合完毕,把不一样的类型一一划分出来,造成一个由小到大的分类系统。最后把整个分类系统画成一张谱系图,用它把全部样本(或指标)间的亲疏关系表示出来。这种方法是最经常使用的、最基本的一种,称为系统聚类分析。对象
介绍两个类别之间的距离:
设dij表示两个样品xi,xj之间的距离,Gp,Gq分别表示两
个类别,各自含有np,nq个样品.
(1)最短距离:
用两类中样品之间的距离最短者做为两类间距离。
(2)最长距离
用两类中样品之间的距离最长者做为两类间距离
(3)类平均距离
用两类中全部两两样品之间距离的平均做为两类间距离。
(4)重心距离
用两类的重心之间的欧氏距离做为两类间的距离。
(5)离差平方和距离(ward)
显然,离差平方和距离与重心距离的平方成正比。blog
设有两类Gp,Gq合并成新的一类Gr,包含了nr=np+nq个样品。如何计算Gr与其余类别Gk之间的距离,这就须要创建类间距离的递推公式。图片
例4. 从例1算得的样品间的欧氏距离矩阵出发,用下列方法进行谱系聚类。
(1)最短距离,(2)最长距离
解:咱们用1,2,3,4,5分别表示辽宁、浙江、河南、甘肃和青海,将距离矩阵记为D0ci
即将(3,4)做为单独一列,一行。将上述计算的结果做为第一列,从D0中去掉第3,4行与3,4列,剩余元素做为其他各列获得D1
而后从D1能够看出G5与G6中的距离最小,所以在2.21的水平上将G6与G5合成一类G7,即G7={3,4,5},计算G7与G一、G2之间的最短距离获得:
将计算结果做为第一列,从D1中划掉{3,4}与{5}所在的行和列,剩余元素做为其余列获得:
从D2中能够看出G1,G2最接近,在11.67的水平上合并成一类G8,至此只剩下G7,G8两类,他们之间的距离为:12.8,故在此水平将合成一类,包含了所有的五个省份。最后,做出谱系聚类图。
以2018年五一数学建模C题为例。
注意对数据的量化处理方式:
数据以下:
代码以下:
clc,clear a=[3.248099862 1400.268343019 1595.279262 5950.668859 653.767546 388.6101631 0.357295727 18320.46154 0.000181229 83235.96118 11701.2957 0.313842461 159.444173537 177.7462234 662.2847022 70.01836837 42.60477173 0.342129003 20970 0.000008924 2628 771.0150925 0.466173300 257.271504590 265.1189989 1025.518975 94.97690194 61.78586048 0.323605467 21921.75 0.000022727 914 1642.154022 0.653314088 193.740207541 257.3170485 955.9373388 79.74565749 56.26133025 0.33415978 14504.66667 0.000012397 339 633.8301523 4.777377094 1890.965552478 2082.616795 8007.801239 932.9081486 558.0550182 0.327117741 16111.6 0.000016287 4840.373816 860.0313942 0.274618332 118.983750840 126.9446139 465.0666947 48.56818687 31.38656774 0.416476625 16795.5 0.000012747 3271 389.5885042 0.227587522 79.673939077 103.4399852 402.6383542 35.18759255 21.34329384 0.314754098 17450 0.000002348 887.733767 330.9389993 0.416676302 169.501844080 194.3978197 776.6916763 59.72942049 44.16420549 0.320140105 18562.5 0.000011300 8691.278086 591.0445205 0.275472987 115.688675169 138.2225522 546.2145303 39.05687346 31.59174764 0.341489362 19719 0.000010870 3565.464982 342.6701571 0.224227313 173.672287944 185.1560534 692.5092589 85.71248786 47.12613714 0.314630309 30815 0.000010066 2608.055401 1917.304038 0.642387833 366.064706442 402.7450517 1551.719929 240.1888106 118.1672418 0.227734688 24155.5 0.000023164 7151.532134 2759.019264 0.216517796 47.380797240 39.30549861 129.1619382 11.69526008 9.253392589 0.620879121 6030 0.000000266 648.8938883 19.44754811 0.212064205 72.389522219 68.70408516 275.8842798 18.86692494 14.42764848 0.304106548 13175 0.000001608 789.8 8.464149342 ] b=zscore(a); b=zscore(a); r=corrcoef(b) d=tril(1-r);d=nonzeros(d)'; d=pdist(b','correlation'); z=linkage(d,'average') h=dendrogram(z); set(h,'Color','k','LineWidth',1.3) T=cluster(z,'maxclust',6) for i=1:6 tm=find(T==i); tm=reshape(tm,1,length(tm)); fprintf('第%d类的有%s\n',i,int2str(tm)); end
获得聚类图以下:
问题二:综合评价
综合评价方法推荐秩和比综合评价法。比较好上手。
例题:为了研究辽宁等5省1991年城镇居民生活消费状况的分布规律,根据调查资料作类型分类,用最短距离作类间分类。数据以下:
解:b=[7.9 39.77 8.49 12.94 19.27 11.05 2.04 13.29 7.68 50.37 11.35 13.3 19.25 14.59 2.75 14.87 9.42 27.93 8.2 8.14 16.17 9.42 1.55 9.76 9.16 27.98 9.01 9.32 15.99 9.1 1.82 11.35 10.06 28.64 10.52 10.05 16.18 8.39 1.96 10.81]; 欧氏距离:d1=pdist(b); %b中每行之间距离 % 五种类间距离聚类 z1=linkage(d1); z2=linkage(d1,'complete'); z3=linkage(d1,'average'); z4=linkage(d1,'centroid'); z5=linkage(d1,'ward');
其中z1输出结果为:
z1 =
3.0000 4.0000 2.2033
6.0000 5.0000 2.2159
1.0000 2.0000 11.6726
8.0000 7.0000 12.7983
% 在2.2033的水平,G3,G4合成一类为G6
% 在2.2159的水平,G6,G5合成一类为G7
% 在11.6726的水平,G1,G2合成一类为G8
% 在12.7983的水平,G7,G8合成一类
做谱系聚类图:H= dendrogram(z1)
% 输出分类结果
T=cluster(z1,3)
结果代表:若分为三类,则辽宁是一类,浙江是一类,河南、青海和甘肃是另外一类。
代码以下:
b=[7.9 39.77 8.49 12.94 19.27 11.05 2.04 13.29 7.68 50.37 11.35 13.3 19.25 14.59 2.75 14.87 9.42 27.93 8.2 8.14 16.17 9.42 1.55 9.76 9.16 27.98 9.01 9.32 15.99 9.1 1.82 11.35 10.06 28.64 10.52 10.05 16.18 8.39 1.96 10.81]; d1=pdist(b); %欧氏距离:b中每行之间距离 % 五种类间距离聚类 z1=linkage(d1); z2=linkage(d1,'complete'); z3=linkage(d1,'average'); z4=linkage(d1,'centroid'); z5=linkage(d1,'ward'); H= dendrogram(z1) %做谱系聚类图 % 输出分类结果 T=cluster(z1,3) % 结果代表:若分为三类,则辽宁是一类,浙江是一类,河南、青海和甘肃是另外一类。
以上是样品之间是欧式距离,类间距离是最短距离聚类大的结果。
可是实际上呢。对样品之间的每一种距离,能够由五种不一样的类间距离进行聚类。那么怎么去评测哪种最好呢?
为此咱们能够去计算复合相关系数,若该系数越接近于1,则该聚类越理想。计算命令以下:
R=cophenet(z,d)
其中,z 是用某种类间距离linkage后的结果,
d是样品之间的某种距离,想了解利用欧式距离聚类,哪一种类间距离最好,能够计算五个复合相关系数,代码以下:
R=[cophenet(z1,d1),cophenet(z2,d1), cophenet(z3,d1),cophenet(z4,d1), cophenet(z5,d1)]
结果以下:
由结果能够看出,因为0.8623最大,因此认为若样品之间采用欧式距离,则类间距离以中间距离最好,若是咱们要找到最理想的分类方法。能够对每一种样品之间的距离,都计算上述的复合相关系数,都计算上述的复合相关系数,这样就能够找到最理想的样品距离与对应的类间距离。
快速聚类法又称为动态聚类法,该方法首先将样品进行粗糙分类,而后依据样品间的距离按必定规则进行调整,直至不能调整为止.该方法适用于样品数量较大的数据集的聚类分析,可是须要事先给定聚类数目,此数目对最终聚类结果有很大影响,实际应用时要选择多个数目进行分类,而后找出合理的分类结果.
4.3.1 快速聚类的步骤
聚点是一批有表明性的样品,他的选择决定了初始分类,并对最终分类有很大影响,选择聚点以前要先肯定聚类数k.
② 首先按照亚非洲、美洲、欧洲、大洋洲分为四类,以每一类的均值向量做为聚点.
③ 最小最大准则(a为原始数据矩阵)
[m,n]=size(a); for i=1:m for j=1:m d(i,j)=[a(i,:)-a(j,:)]*[a(i,:)-a(j,:)]‘; %欧氏距离平方 end end d1=max(d); d2=sort(d1,'descend'); [d2,i1]=sort(d1,‘descend’); % i1前两位数字为初始聚点号码 d3=max(min(setdiff(d(:,i1(1)),0)),min(setdiff(d(:,i1(2)),0))); t3=[find(d(:,i1(1))==d3),find(d(:,i1(2))==d3)];% c=[i1(1),i1(2),t3]; c1=setdiff([1:13]',c); d4=max(min(d(c1,c))); t4=[find(d(:,i1(1))==d4),find(d(:,i1(2))==d4),find(d(:,t3)==d4)];
由此获得:美国、南非、日本、德国
% 初始聚类 c2=setdiff(c1,t4); c3=[i1(1),i1(2),t3,t4]; D=d(:,[i1(1),i1(2),t3,t4]); [D1,J1]=sort(D,2); for i=1:m if D1(i)~=0 L1(i)=J1(i,1); else L1(i)=J1(i,2); end end q1=find(L1==1);q2=find(L1==2);q3=find(L1==3);q4=find(L1==4); G1=a([i1(1),q1],:) G2=a(setdiff([i1(2),q2],[i1(1),q1]),:) G3=a(setdiff([t3,q3],[i1(1),i1(2),q1,q2]),:) G4=a(setdiff([t4,q4],[i1(1),i1(2),t3,q3]),:)
% 二次聚点与分类 m1=mean(G1); m2=G2; m3=mean(G3); m4=mean(G4); Q=dist([m1;m2;m3;m4],a'); F1=sort(Q); [F1,U1]=sort(Q) e1=find(U1(1,:)==1), e2=find(U1(1,:)==2), e3=find(U1(1,:)==3), e4=find(U1(1,:)==4)
聚类结果以下:
巴西、印度、南非
由适当的阈值肯定;
根据数据点的散布直观地肯定类的个数;
根据统计量肯定分类个数;
根据谱系图肯定分类个数的准则: