杨威yangweipyf@163.com西安建筑科技大学“人以类聚,物以群分”。对事物进行分类,是人们认识事物的出发点,也是人们认识世界的一种重要方法。因此,分类学已成为人们认识世界的一门基础学科。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种多元统计方法,所谓类,通俗地说,就是指相似元素的集合。本次主要介绍谱系聚类、K均值聚类、模糊C均值聚类和模糊减法聚类及其MATLAB实现.1距离聚类1.1聚类的思想在社会经济领域中存在着大量分类问题,比如对我国30个省市自治区独立核算工业企业经济效益进行分析,一般不是逐个省市自治区去分析,而较好地做法是选取能反映企业经济效益的代表性指标,如:百元固定资产实现利税、资金利税率、产值利税率、百元销售收入实现利润、全员劳动生产率等等,根据这些指标对30个省市自治区进行分类,然后根据分类结果对企业经济效益进行综合评价,就易于得出科学的分析。由于要考察的物价指数很多,通常先对这些物价指数进行分类。总之,需要分类的问题很多,因此聚类分析这个有用的数学工具越来越受到人们的重视,它在许多领域中都得到了广泛的应用。聚类问题的一般提法是:设有个样品的元观测数据组成一个数据矩阵111212122212ppnnnpxxxxxxXxxxnp其中每一行表示一个样品,每一列表示一个指标,表示第个样品关于第项指标的观测值,要根据观测值矩阵X对样品或指标进行分类。ij分类的思想:在样品之间定义距离,在指标之间定义相似系数.样品距离表明样品之间的相似度,指标之间的相似系数刻画指标之间的相似度.ijx聚类分析的基本思想:将样品(或变量)按相似度的大小逐一归类,关系密切的聚集到较小的一类,关系疏远的聚集到较大的一类,直到所有的样品(或变量)都聚集完毕。向量的距离设有n个样品的p元观测数据12(,,,),1,2,,.Tiiiipxxxxin这时,每个样品可看成n元空间的一个点,也即一个维向量,两个向量之间的距离记为,满足如下条件:(1)(非负性)且当且仅当(2)(对称性)(3)(三角不等式)在聚类分析中最常用的是欧氏距离。(,)0,ijdxx(,)0ijdxxijxx),(),(ijjixxdxxd),(),(),(jkkijixxdxxdxxd21/21(,)[()]pijikjkkdxxxx1(,)||pijikjkkdxxxxmpkmjkikjixxxxd/11]||[),(1.欧氏(Euclidean)距离2.绝对距离3.明可夫斯基(Minkowski)距离4.切贝雪夫(Chebyshev)距离||max),(1jkikpkjixxxxd其中m(m0)为常数。2/1122]/)([),(pkkjkikjisxxxxd)()(),(1jiTjijixxxxxxd5.方差加权(seuclidean)距离6.马氏(mahalanobis)距离其中为样品的协方差矩阵..1,)(111122njjkknjkjkkxnXXxns其中在MATLAB中,计算距离的命令是pdist.调用格式Y=pdist(X,distance)输入的X是一个矩阵,行为个体,列为指标,distance是距离的类型。若缺省distance,则输出的Y是一个行向量,向量的长度为(N-1)*N/2,其中N是样本的容量,Y的元素分别为个体(1,2),(1,3),...,(1,N),(2,3),...(2,N),.....(N-1,N)之间的欧氏距离。可选项distance有:‘euclidean’欧氏距离;‘cityblock’绝对距离;‘minkowski’明氏距离(m=2);‘chebychev’切氏距离;‘seuclidean’方差加权距离;‘mahalanobis’马氏距离;‘jaccard’Jaccard相关系数。省(市)工薪收入(元/人)经营净收入(元/人)财产性收入(元/人)转移性收入(元/人)北京18738.96778.36452.757707.87上海21791.111399.14369.126199.77安徽9302.38959.43293.923603.72陕西8354.63638.7665.332610.61新疆9422.22938.15141.751976.49表省(区、市)城镇居民人均家庭收入例1.12008年我国5省、区、市城镇居民人均年家庭收入如下表为了研究上述5个省、区、市的城镇居民收入差异,需要利用统计资料对其进行分类,指标变量有4个,计算各省、区、市之间的前6种距离解:x=[18738.96778.36452.757707.8721791.111399.14369.126199.779302.38959.43293.923603.728354.63638.7665.332610.619422.22938.15141.751976.49];d1=pdist(x);%或者命令d1=pdist(x,'euclidean')此时计算出各行之间的欧氏距离,为了得到距离矩阵,键入命令:D=squareform(d1);%注意此时d1必须是一个行向量,结果为实对称矩阵D=1.0e+004*00.34621.02931.15751.09440.346201.27631.39321.30801.02931.276300.14280.16391.15751.39320.142800.12801.09441.30800.16390.12800矩阵D中的第3行第2列为12763,表示上海与山西的欧氏距离为12763,其余类推.若想得到下三角阵,则有命令:S=tril(squareform(d1))S=1.0e+004*000000.346200001.02931.27630001.15751.39320.1428001.09441.30800.16390.12800若想得到上三角矩阵,可用命令S=triu(squareform(d1))欧氏距离与量纲有关,因此,有时需要对数据进行预处理,如标准化等,在Matlab中的命令是:zscore(x).输入x表示N行p列的原始观测矩阵,行为个体,列为指标。输出Z为x的标准化矩阵,即Z=(x-ones(N,1)*mean(x))./(ones(N,1)*std(x)),其中mean(x)为行向量,表示各个指标的均值估计,std(x)表示指标的标准差估计。./表示对应元素相除,ones(N,1)表示元素全为1的行向量,向量的长度为N。Z=(x-ones(5,1)*mean(x))./(ones(5,1)*std(x))d3=pdist(x,'minkowski',3);%计算明氏距离,d3为1行10列的行向量d4=pdist(x,'chebychev')%计算切氏距离.d5=pdist(x,'seuclidean')%计算方差加权距离.d6=pdist(x,'mahalanobis')%计算马氏距离d2=pdist(x,'cityblock');%计算绝对距离D2=squareform(d2)D2=1.0e+004*00.52651.38811.60091.55190.526501.56001.80901.72811.38811.560000.24900.19211.60091.80900.249000.20781.55191.72810.19210.20780聚类分析方法不仅可以对样品进行分类,而且可以对变量进行分类,在对变量进行分类时,常常采用相似系数来度量变量之间的相似性。对个指标变量进行聚类时,用相似系数来衡量变量之间的相似程度(关联度),若用表示变量之间的相似系数,则应满足:pC,||1C(1)且1C(2)当且仅当1C,0kk(3)CC相似系数中最常用的是相关系数与夹角余弦.例1.2.计算例1.1中各指标之间的相关系数与夹角余弦解:x=[…];%与例6.1.1数据相同R=corrcoef(x);%指标之间的相关系数R=[1.00000.61830.81380.89310.61831.00000.42870.29270.81380.42871.00000.92350.89310.29270.92351.0000]22()()C()()ijxxyyxxyy其中x表示第i行元素,y表示第j行元素。x1=normc(x);%将x的各列化为单位向量J=x1'*x1%计算夹角余弦J=1.00000.95360.96090.97970.95361.00000.90260.89900.96090.90261.00000.98330.97970.89900.98331.00003类间距离与递推公式前面,我们介绍了两个向量之间的距离,下面我们介绍两个类别之间的距离:ijdijx,xqpGG,pqn,n,minpqpqijiGjGDd设表示两个样品之间的距离,分别表示两个类别,各自含有(1)最短距离即用两类中样品之间的距离最短者作为两类间距离.个样品.(2)最长距离,maxpqpqijiGjGDd即用两类中样品之间的距离最长者作为两类间距离.(3)类平均距离1pqpqijiGjGpqDdnn即用两类中所有两两样品之间距离的平均作为两类间距离.)()(),(qpTqpqppqxxxxxxdDqpxx,qpGG,(4)重心距离其中分别是两类重心之间的欧氏距离作为类间距离.一组数据的平均数即为这组数据的重心。的重心,这是用(5)离差平方和距离(ward)2()()pqTpqpqpqpqnnDxxxxnn显然,离差平方和距离与重心距离的平方成正比.qpGG,rGqprnnnrG(,)kGkpq设有两类合并成新的一类,包含了个样品,如何计算与其他类别之间的距离,这就需要建立类间距离的递推公式.(1)最短距离min(,)rkpkqkDDD(2)最长距离max(,)rkpkqkDDD(3)类平均距离pqrkpkqkrrnnDDDnn(4)重心距离2222pqpqrkpkqkpqrrrrnnnnDDDDnnnn(5)离差平方和距离2222pkqkkrkpkqkpqrkrkrknnnnnDDDDnnnnnn2谱系聚类与K均值聚类谱系聚类法是目前应用较为广泛的一种聚类法.谱系聚类是根据生物分类学的思想对研究对象进行分类的方法.在生物分类学中,分类的单位是:门、纲、目、科、属、种,其中种是分类的基本单位,分类单位越小,它所包含的生物就越少,生物之间的共同特征就越多.利用这种思想,谱系聚类首先将各样品自成一类,然后把最相似(距离最近或相似系数最大)的样品聚为小类,再将已聚合的小类按各类之间的相似性(用类间距离度量)进行再聚合,随着相似性的减弱,最后将一切子类都聚为一大类,从而得到一个按相似性大小聚结起来的一个谱系图.2.1谱系聚类1谱系聚类的步骤(1)n个样品开始作为n个类,距离或相似系数,得到实对称矩阵计算两两之间的1112121222012nnnnnnddddddDddd(2)从0D的非主对角线上找最小元素(距离)或最大元素(相似系数),设该元素是pqD则将,pqGG合并成一个新类(,)rpqGGG在0D中去掉qpG,G所在的两行、两列,并加上新类rG之间的距离或相似系数,得到与其余各类1n阶矩阵1D1D2D2D(3)从出发重复步骤(2)的做法得到,再由出发重复上述步骤,直到两个样品聚为一个大类为止.(4)在合并过程中要记下合并样品的编号及两类合并时的水平,并绘制聚类谱系图.例2.1从例1.1算得的样品间的欧氏距离矩阵出发,用下列方法进行谱系聚类.(1)最短距离,(2)最长距离.解:我们用1,2,3,4,5分别表示北京,上海,安徽,陕西和新疆,将欧氏距离矩阵除以0{1}{2}{3}{4}{5}D{1}{2}{3}{4}{5}