[转]用matlab做聚类分析

  • Post author:
  • Post category:其他



转载一:




MATLAB

提供了两种方法进行聚类分析:

1

、利用

clusterdata

函数对数据样本进行一次聚类,这个方法简洁方便,其特点是使用范围较窄,不能由用户根据自身需要来设定参数,更改距离计算方法;

2

、分步聚类:(

1

)用

pdist

函数计算变量之间的距离,找到数据集合中两辆变量之间的相似性和非相似性;(

2

)用

linkage

函数定义变量之间的连接;(

3

)用

cophenetic

函数评价聚类信息;(

4

)用

cluster

函数进行聚类。


下边详细介绍两种方法:

1

、一次聚类

Clusterdata

函数可以视为

pdist



linkage



cluster

的综合,一般比较简单。




clusterdata

函数:


调用格式:

T=clusterdata(X,cutoff)

等价于Y=pdist(X,’euclid’); Z=linkage(Y,’single’); T=cluster(Z,cutoff)


2

、分步聚类




1

)求出变量之间的相似性




pdist

函数计算出相似矩阵,有多种方法可以求距离,若此前数据还未无量纲化,则可用

zscore

函数对其标准化




pdist

函数:


调用格式:

Y=pdist(X,’metric’)


说明:

X



M*N

矩阵,为由

M

个样本组成,每个样本有

N

个字段的数据集

metirc

取值为:’

euclidean’

:欧氏距离(默认)

‘seuclidean’

:标准化欧氏距离;

‘mahalanobis’

:马氏距离




pdist

生成一个

M*(M-1)/2

个元素的行向量,分别表示

M

个样本两两间的距离。这样可以缩小保存空间,不过,对于读者来说却是不好操作,因此,若想简单直观的表示,可以用

squareform

函数将其转化为方阵,其中

x(i,j)

表示第

i

个样本与第

j

个样本之的距离,对角线均为

0.




2

)用

linkage

函数来产生聚类树




linkage

函数:


调用格式:

Z=linkage(Y,’method’)


说明:

Y



pdist

函数返回的

M*(M-1)/2

个元素的行向量,

method

可取值:

‘single’

:最短距离法(默认);

’complete’

:最长距离法;

‘average’

:未加权平均距离法;

’weighted’:

加权平均法

‘centroid’




质心距离法;

‘median’

:加权质心距离法;

‘ward’

:内平方距离法(最小方差算法)




返回的

Z

为一个

(M-1)*3

的矩阵,其中前两列为索引标识,表示哪两个序号的样本可以聚为同一类,第三列为这两个样本之间的距离。另外,除了

M

个样本以外,对于每次新产生的类,依次用

M+1



M+2





来标识。


为了表示

Z

矩阵,我们可以用更直观的聚类数来展示,


方法为:

dendrogram(Z),

产生的聚类数是一个

n

型树,最下边表示样本,然后一级一级往上聚类,最终成为最顶端的一类。纵轴高度代表距离列。


另外,还可以设置聚类数最下端的样本数,默认为

30

,可以根据修改

dendrogram(Z,n)

参数

n

来实现,

1<n<M



dendrogram(Z,0)

则表

n=M

的情况,显示所有叶节点。




3

)用

cophenetic

函数评价聚类信息




cophenet

函数:


调用格式:

c=cophenetic(Z,Y)


说明:利用

pdist

函数生成的

Y



linkage

函数生成的

Z

计算

cophenet

相关系数。】

cophene

检验一定算法下产生的二叉聚类树和实际情况的相符程度

,

就是检测二叉聚类树中各元素间的距离和

pdist

计算产生的实际的距离之间有多大的相关性,另外也可以用

inconsistent

表示量化某个层次的聚类上的节点间的差异性。




4

)最后,用

cluster

进行聚类,返回聚类列。



转载二:


Matlab


提供了两种方法进行聚类分析。


一种是利用

clusterdata

函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法;


另一种是分步聚类:(

1

)找到数据集合中变量两两之间的相似性和非相似性,用

pdist

函数计算变量之间的距离;(

2

)用

linkage

函数定义变量之间的连接;(

3

)用

cophenetic

函数评价聚类信息;(

4

)用

cluster

函数创建聚类。



1






Matlab

中相关函数介绍


1.1  pdist


函数


调用格式:

Y=pdist(X,’metric’)


说明:用

‘metric’

指定的方法计算

X

数据矩阵中对象之间的距离。




X


:一个

m

×

n

的矩阵,它是由

m

个对象组成的数据集,每个对象的大小为

n



metric’


取值如下:


‘euclidean’


:欧氏距离(默认);

‘seuclidean’

:标准化欧氏距离;


‘mahalanobis’


:马氏距离;

‘cityblock’

:布洛克距离;


‘minkowski’


:明可夫斯基距离;

‘cosine’



‘correlation’




‘hamming’



‘jaccard’




‘chebychev’



Chebychev

距离。


1.2  squareform


函数




调用格式:

Z=squareform(Y,..)




说明:


强制将距离矩阵从上三角形式转化为方阵形式,或从方阵形式转化为上三角形式。


1.3  linkage


函数


调用格式:

Z=linkage(Y,’method’)





明:用‘

method

’参数指定的算法计算系统聚类树。


Y




pdist

函数返回的距离向量;


method


:可取值如下:


‘single’


:最短距离法(默认);

‘complete’

:最长距离法;




average

’:未加权平均距离法;




weighted

’: 加权平均法;


‘centroid’


:质心距离法;

‘median’

:加权质心距离法;


‘ward’


:内平方距离法(最小方差算法)


返回:

Z

为一个包含聚类树信息的(

m-1

)×

3

的矩阵。


1.4  dendrogram


函数


调用格式:

[H



T



…]=dendrogram(Z,p



…)


说明:生成只有顶部

p

个节点的冰柱图(谱系图)。


1.5  cophenet


函数


调用格式:

c=cophenetic(Z,Y)


说明:利用

pdist

函数生成的

Y



linkage

函数生成的

Z

计算

cophenet

相关系数。


1.6  cluster


函数


调用格式:

T=cluster(Z,…)


说明:根据

linkage

函数的输出

Z

创建分类。


1.7  clusterdata


函数


调用格式:

T=clusterdata(X,…)


说明:根据数据创建分类。


T=clusterdata(X,cutoff)


与下面的一组命令等价:


Y=pdist(X,’euclid’);


Z=linkage(Y,’single’);


T=cluster(Z,cutoff);



2. Matlab




程序



2.1




一次聚类法


X=[11978 12.5 93.5 31908;…;57500 67.6 238.0 15900];


T=clusterdata(X,0.9)



2.2




分步聚类


Step1


寻找变量之间的相似性




pdist

函数计算相似矩阵,有多种方法可以计算距离,进行计算之前最好先将数据用

zscore

函数进行标准化。


X2=zscore(X);  %


标准化数据


Y2=pdist(X2);  %


计算距离


Step2


定义变量之间的连接


Z2=linkage(Y2);


Step3


评价聚类信息




C2=cophenet(Z2,Y2);       //0.94698


Step4


创建聚类,并作出谱系图


T=cluster(Z2,6);


H=dendrogram(Z2);


分类结果:

{


加拿大

}



{


中国,美国,澳大利亚

}



{


日本,印尼

}



{


巴西

}



{


前苏联

}


剩余的为一类。

引自:

http://blog.sina.com.cn/s/blog_5a13cf680100aj18.html

转载于:https://www.cnblogs.com/qqingmu/archive/2009/02/25/1398215.html