聚类分析在实际工作中,我们经常遇到分类问题.若事先已经建立类别,则使用判别分析,若事先没有建立类别,则使用聚类分析。
聚类与分类的不同在于,聚类所要求划分的类是未知的。
聚类是将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。
在MA TLAB 软件包中,主要使用的是系统聚类法。
系统聚类法是聚类分析中应用最为广泛的一种方法.它的基本原理是:首先将一定数量的样品(或指标)各自看成一类,然后根据样品(或指标)的亲疏程度,将亲疏程度最高的两类合并,然后重复进行,直到所有的样品都合成一类。
衡量亲疏程度的指标有两类:距离、相似系数。
Matlab 提供了两种方法进行聚类分析: 一种是利用clusterdata 函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法; 另一种是分步聚类:Step1 寻找变量之间的相似性用pdist 函数计算相似矩阵,有多种方法可以计算距离,进行计算之前最好先将数据用zscore 函数进行标准化。
X2=zscore(X); %标准化数据 Y=pdist(X2); %计算距离 Step2 定义变量之间的连接 Z=linkage(Y);Step3 评价聚类信息 C=cophenet(Z,Y);Step4 创建聚类,并作出谱系图 T=cluster(Z,6); H=dendrogram(Z);一、常用距离 1)欧氏距离假设有两个n 维样本),,,(112111n x x x x =和),,,(222212n x x x x =,则它们的欧氏距离为∑=-=nj j jx xx x d 122121)(),(2)标准化欧氏距离 3)马氏距离 4)布洛克距离 5)闵可夫斯基距离 6)余弦距离 7)相似距离二、MATLAB 中常用的计算距离的函数假设我们有n m ⨯阶数据矩阵),,,(21n x x x x =,每一行是一个样本数据. 在MA TLAB 中计算样本点之间距离的内部函数为y=pdist(x) 计算样本点之间的欧氏距离(默认)y=pdist(x,'seuclid') 计算样本点之间的标准化欧氏距离y=pdist(x,'mahal') 计算样本点之间的马氏距离y=pdist(x,'cityblock') 计算样本点之间的布洛克距离y=pdist(x,'minkowski') 计算样本点之间的闵可夫斯基距离y=pdist(x,'minkowski',p) 计算样本点之间的参数为p的闵可夫斯基距离y=pdist(x,'cosine') 计算样本点之间的余弦距离y=pdist(x,'correlation') 计算样本点之间的相似距离另外,内部函数yy=squareform(y)表示将样本点之间的距离用矩阵的形式输出。
例:x=[3 1.7;1 1;2 3; 2 2.5; 1.2 1; 1.1 1.5; 3 1] % 7×2,每行一个样本y=pdist(x,'mahal') %每两个样本的马氏距离yy=squareform(y)%样本点之间的距离用矩阵的形式输出x =3.0000 1.70001.0000 1.00002.00003.00002.0000 2.50001.2000 1.00001.1000 1.50003.0000 1.0000y =Columns 1 through 132.3879 2.1983 1.6946 2.1684 2.2284 0.8895 2.6097 2.0616 0.2378 0.6255 2.3778 0.6353 2.5522Columns 14 through 212.0153 2.9890 1.9750 1.5106 2.4172 0.6666 2.1400 2.4517yy =0 2.3879 2.1983 1.6946 2.1684 2.2284 0.88952.3879 0 2.6097 2.0616 0.2378 0.6255 2.37782.1983 2.6097 0 0.6353 2.5522 2.0153 2.98901.69462.0616 0.6353 0 1.9750 1.5106 2.41722.1684 0.2378 2.5522 1.9750 0 0.6666 2.14002.2284 0.6255 2.0153 1.5106 0.6666 0 2.45170.8895 2.3778 2.9890 2.4172 2.1400 2.4517 0三、常用的聚类方法常用的聚类方法主要有以下几种:最短距离法、最长距离法、平均距离法、重心法、平方和递增法等等.四、创建系统聚类树假设已经得到样本点之间的距离y,可以用linkage函数创建系统聚类树,格式为z=linkage(y).其中:z为一个包含聚类树信息的(m-1) 3的矩阵.例如:z=2.000 5.000 0.23.0004.000 1.28则z的第一行表示第2、第5样本点连接为一个类,它们距离为0.2;则z的第二行表示第3、第4样本点连接为一个类,它们距离为1.28.在MA TLAB中创建系统聚类树的函数为z=linkage(y) 表示用最短距离法创建系统聚类树(默认)z=linkage(y,'complete') 表示用最长距离法创建系统聚类树z=linkage(y,'average') 表示用平均距离法创建系统聚类树z=linkage(y,'centroid') 表示用重心距离法创建系统聚类树z=linkage(y,'ward') 表示用平方和递增法创建系统聚类树例:z=linkage(y,'average') %用平均距离法创建系统聚类树z =2.0000 5.0000 0.23783.00004.0000 0.63536.0000 8.0000 0.64601.0000 7.0000 0.88959.0000 10.0000 2.120711.0000 12.0000 2.3053另外,内部函数h=dendrogram(z)画出由Z描述的聚类树谱系图,谱系图由许多U型线连接,U型线的高表示所连接两点之间的距离。
dendrogram默认最多画30个最底层节点,可设置参数改变这个限制,比如dendrogram(Z,0)就会把所有数据点索引下标都标出来,但对于成千上万的数据集合,这样的结果必然是图形下方非常拥挤。
h=dendrogram(z) % 输出聚类树形谱系图h =349.0054351.0048352.0048353.0048354.0048355.0048五、计算聚类树信息与原始数据的距离之间的相关性cophenetic函数用于评价聚类信息,利用pdist函数生成的y和linkage函数生成的z计算聚类树信息与原始数据的距离之间的相关性(值在0-1之间),这个值越接近1,表示聚类效果越好。
调用格式:c=cophenet(z,y)c=cophenet(z,y)c =0.9239六、根据系统聚类树创建聚类假设已经求出系统聚类树z,我们根据z来创建聚类,使用cluster函数。
调用格式:t=cluster(z,n) 其中n>1为正整数,表示将原始数据分为n类;t=cluster(z,cutoff) 0<cutoff<1为对Z切割分类的阈值,表示在系统聚类树中距离小于a的样本点归结为一类;t=cluster(z,3) %n为正整数,是分类数量t =3211223t=cluster(z,0.8) %以阈值0.8对Z切割分类t =2311332七、一次聚类根据数据一次创建分类调用格式:t=clusterdata(x,…)t=clusterdata(x,cutoff)与下面的一组命令等价:y=pdist(x,’euclid’);z=linkage(y,’single’);t=cluster(z,cutoff);t=clusterdata(x,0.8)t =3211223聚类分析示例:1. 平面上点的聚类X=randn(8,2) %在平面上随机生成8个点plot(X(:,1),X(:,2),'bo') %给个图,将来对照聚类结果s=['1';'2';'3';'4';'5';'6';'7';'8'];text(X(:,1)+0.05,X(:,2),s)X =-1.3813 -1.13980.3155 -0.21111.5532 1.19020.7079 -1.11621.9574 0.63530.5045 -0.60141.8645 0.5512-0.3398 -1.0998Y=pdist(X)Y =Columns 1 through 131.9343 3.74702.08933.7812 1.9612 3.6599 1.0422 1.8697 0.9865 1.8472 0.4336 1.7264 1.1042Columns 14 through 262.4565 0.6865 2.0760 0.7108 2.9712 2.1515 0.5535 2.0293 1.0478 1.9079 0.1253 2.8788 1.7827Columns 27 through 280.9805 2.7541Y不是很容易看懂,可以用squareform把Y转换成方阵形式,方阵中<i,j>位置的数值就是X中第i和第j点之间的距离,显然这个方阵应该是个对角元素为0的对称阵。
squareform(Y)ans =0 1.9343 3.7470 2.0893 3.7812 1.9612 3.6599 1.04221.9343 0 1.8697 0.9865 1.8472 0.4336 1.7264 1.10423.7470 1.8697 0 2.4565 0.6865 2.0760 0.7108 2.97122.0893 0.9865 2.4565 0 2.1515 0.5535 2.0293 1.04783.7812 1.8472 0.6865 2.1515 0 1.9079 0.1253 2.87881.9612 0.43362.0760 0.5535 1.9079 0 1.7827 0.98053.6599 1.7264 0.7108 2.0293 0.1253 1.7827 0 2.75411.0422 1.10422.9712 1.0478 2.8788 0.9805 2.7541 0Z=linkage(Y) %平面上点的聚类中最经常使用的就是欧氏距离H=dendrogram(Z); % 输出聚类树形谱系图Z =5.0000 7.0000 0.12532.0000 6.0000 0.43364.0000 10.0000 0.55353.0000 9.0000 0.68658.0000 11.0000 0.98051.0000 13.0000 1.042212.0000 14.0000 1.72642. 设某地区有八个观测点的数据,样本距离矩阵如X所示,根据最短距离法聚类分析。