文档介绍:聚类分析
在实际工作中,我们经常遇到分类问题。若事先已经建立类别,则使用判别分析,若事先没有建立类别,则使用聚类分析。
聚类分析主要是研究在事先没有分类的情况下,如何将样本归类的方法。
聚类分析的内容包含十分广泛,有系统聚类法、动态聚类法、分裂法、最优分割法、模糊聚类法、图论聚类法、聚类预报等多种方法。
在Matlab软件包中,主要使用系统聚类法。
系统聚类法是聚类分析中应用最为广泛的一种方法。它的基本原理是:首先将一定数量的样品(或指标)各自看成一类,然后根据样品(或指标)的亲疏程度,将亲疏程度最高的两类合并,如此重复进行,直到所有的样品都合成一类。衡量亲疏程度的指标有两类:距离、相似系数。
(1)常用距离
①欧氏距离
假设有两个n维样本和,则它们的欧氏距离为:
②标准化欧氏距离
假设有两个n维样本和,则它们的标准化欧氏距离为:
其中,D表示m个样本的方差矩阵:,其中表示第j个样本的方差。
③马氏距离
假设共有n个指标,第个指标共测得m个数据(要求):
于是,我们得到阶的数据矩阵,每一行是一个样本数据。阶数据矩阵X的阶协方差矩阵记作。
两个n维样本和的马氏距离如下:
马氏距离考虑了各个指标量纲的标准化,是对其它几种距离的改进。马氏距离不仅排除了量纲的影响,而且合理考虑了指标的相关性。
④布洛克(City Block)距离
两个n维样本和的布洛克距离如下:
⑤明可夫斯基(Minkowski)距离
两个n维样本和的明可夫斯基距离:
注意:时是布洛克距离,时是欧氏距离。
⑥余弦距离(Cosine distance)
这是受相似形几何原理启发而产生的一种标准,在识别图像和文字时,常用夹角余弦为标准。
⑦相似距离(Correlation distance)
(2)Matlab中常用的计算距离的函数
假设我们有阶的数据矩阵,每一行是一个样本数据。在Matlab中计算样本点之间距离的内部函数为:
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)表示将样本点之间的距离用矩阵的形式输出。
(3)常用的聚类方法
常用的聚类方法主要有以下几种:最短距离法、最长距离法、中间距离法、重心法、平方和递增法等等。
(4)创建系统聚类树
假设已经得到样本点之间的距离y,可以用linkage函数创建系统聚类树,格式为:z = linkage(y),其中z为一个包含聚类树信息的(m –1)×3的矩阵。例如,
z =
则,z的第一行表示第2、第5样本点连接为一个类,,z的第二行表示第3、第4样本点连接为一个类,。
在Matlab中创建系统聚类树的函数为:
z = linkage(y)
表示用最短距离法创建系统聚类树
z = linkage(y, ‘complete’)
表示用最长距离法创建系统聚类树
z = linkage(y, ‘average’)
表示用平均距离法创建系统聚类树
z = linkage(y, ‘centroid’)
表示用重心距离法创建系统聚类树
z = linkage(y, ‘ward’)
表示用平方和递增法创建系统聚类树
例1 在Matlab中写一个名字为opt_linkage_1的M—文件:
x=[3 ;1 1;2 3;2 ; 1; ;3 1];
y=pdist(x,'mahal');
yy=squareform(y)
z=linkage(y,’centroid’)
h=dendrogram(z)
存盘后按F5键执行,得到结果:
yy =
0
0
0