聚类分析.docx

上传人:b****5 文档编号:6190426 上传时间:2023-01-04 格式:DOCX 页数:19 大小:111.53KB
下载 相关 举报
聚类分析.docx_第1页
第1页 / 共19页
聚类分析.docx_第2页
第2页 / 共19页
聚类分析.docx_第3页
第3页 / 共19页
聚类分析.docx_第4页
第4页 / 共19页
聚类分析.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

聚类分析.docx

《聚类分析.docx》由会员分享,可在线阅读,更多相关《聚类分析.docx(19页珍藏版)》请在冰豆网上搜索。

聚类分析.docx

聚类分析

聚类分析

在实际工作中,我们经常遇到分类问题.若事先已经建立类别,则使用判别分析,若事先没有建立类别,则使用聚类分析.

聚类分析主要是研究在事先没有分类的情况下,如何将样本归类的方法.聚类分析的内容包含十分广泛,有系统聚类法、动态聚类法、分裂法、最优分割法、模糊聚类法、图论聚类法、聚类预报等多种方法.

聚类分析指将物理或抽象对象的集合分组成为由类似的对象组成的多个类的分析过程。

它是一种重要的人类行为。

聚类分析的目标就是在相似的基础上收集数据来分类。

聚类源于很多领域,包括数学,计算机科学,统计学,生物学和经济学。

在不同的应用领域,很多聚类技术都得到了发展,这些技术方法被用作描述数据,衡量不同数据源间的相似性,以及把数据源分类到不同的簇中。

聚类与分类的不同在于,聚类所要求划分的类是未知的。

聚类是将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。

从统计学的观点看,聚类分析是通过数据建模简化数据的一种方法。

§9.1聚类分析基本知识介绍

在MATLAB软件包中,主要使用的是系统聚类法.

系统聚类法是聚类分析中应用最为广泛的一种方法.它的基本原理是:

首先将一定数量的样品(或指标)各自看成一类,然后根据样品(或指标)的亲疏程度,将亲疏程度最高的两类合并,然后重复进行,直到所有的样品都合成一类。

衡量亲疏程度的指标有两类:

距离、相似系数.

一、常用距离

1)欧氏距离

假设有两个

维样本

,则它们的欧氏距离为

3)马氏距离

假设共有

个指标,第

个指标共测得

个数据(要求

):

于是,我们得到

阶的数据矩阵

,每一行是一个样本数据.

阶数据矩阵

阶协方差矩阵记做

两个

维样本

的马氏距离如下:

马氏距离考虑了各个指标量纲的标准化,是对其它几种距离的改进.马氏距离不仅排除了量纲的影响,而且合理考虑了指标的相关性.

4)布洛克距离

两个

维样本

的布洛克距离如下:

5)闵可夫斯基距离

两个

维样本

的闵可夫斯基距离如下:

注:

时是布洛克距离;

时是欧氏距离.

6)余弦距离

这是受相似性几何原理启发而产生的一种标准,在识别图像和文字时,常用夹角余弦为标准.

7)相似距离

二、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)表示将样本点之间的距离用矩阵的形式输出.

三、常用的聚类方法

常用的聚类方法主要有以下几种:

最短距离法、最长距离法、中间距离法、重心法、平方和递增法等等.

四、创建系统聚类树

假设已经得到样本点之间的距离y,可以用linkage函数创建系统聚类树,格式为z=linkage(y).

其中:

z为一个包含聚类树信息的(m-1)

3的矩阵.例如:

z=

2.0005.0000.2

3.0004.0001.28

则z的第一行表示第2、第5样本点连接为一个类,它们距离为0.2;则z的第二行表示第3、第4样本点连接为一个类,它们距离为1.28.

在MATLAB中创建系统聚类树的函数为

z=linkage(y)表示用最短距离法创建系统聚类树

z=linkage(y,'complete')表示用最长距离法创建系统聚类树

z=linkage(y,'average')表示用平均距离法创建系统聚类树

z=linkage(y,'centroid')表示用重心距离法创建系统聚类树

z=linkage(y,'ward')表示用平方和递增法创建系统聚类树

§9.2聚类分析示例

层次聚类法(HierarchicalClustering)的计算步骤:

①计算n个样本两两间的距离{dij},记D

②构造n个类,每个类只包含一个样本;

③合并距离最近的两类为一新类;

④计算新类与当前各类的距离;若类的个数等于1,转到5);否则回3);

⑤画聚类图;

⑥决定类的个数和类;

 

例1在MATLAB中写一个名为opt_linkage_1的M文件:

x=[31.7;11;23;22.5;1.21;1.11.5;31];%每行一个样本

y=pdist(x,'mahal');每两个样本的马氏距离,1-2…1-72-32-4….

yy=squareform(y)%,样本点之间的距离用矩阵的形式输出

z=linkage(y,'centroid');%用重心距离法创建系统聚类树

h=dendrogram(z)%Plotdendrogramgraphs画树状图

存盘后按F5键执行,得到结果如下:

yy=

02.38792.19831.69462.16842.22840.8895

2.387902.60972.06160.23780.62552.3778

2.19832.609700.63532.55222.01532.9890

1.69462.06160.635301.97501.51062.4172

2.16840.23782.55221.975000.66662.1400

2.22840.62552.01531.51060.666602.4517

0.88952.37782.98902.41722.14002.45170

z=

2.00005.00000.2378

6.00008.00000.6353

3.00004.00000.6353

1.00007.00000.8895

9.000010.00002.1063

11.000012.00002.0117

按重心距离法得到的系统聚类树为

其中:

h=dendrogram(z)表示输出聚类树形图的冰状图.

一、根据系统聚类树创建聚类

假设已经求出系统聚类树z,我们根据z来创建聚类,使用cluster函数.

(1)确定对象(实际上就是数据集中的每个数据点)之间的相似性,实际上就是定义一个表征对象之间差异的距离,例如最简单的平面上点的聚类中,最经常使用的就是欧几里得距离。

这在MATLAB中可以通过Y=pdist(X)实现,例如

>>X=randn(6,2)

X=

-0.43261.1892

-1.6656-0.0376

0.12530.3273

0.28770.1746

-1.1465-0.1867

1.19090.7258

>>plot(X(:

1),X(:

2),'bo')%给个图,将来对照聚类结果

>>Y=pdist(X)

Y=

Columns1through14

1.73941.02671.24421.55011.68831.82771.96480.5401

2.95680.22281.37171.13771.47901.0581

Column15

2.5092

例子中X数据集可以看作包含6个平面数据点,pdist之后的Y是一个行向量,15个元素分别代表X的第1点与2-6点、第2点与3-6点,......这样的距离。

那么对于M个点的数据集X,pdist之后的Y将是具有M*(M-1)/2个元素的行向量。

Y这样的显示虽然节省了内存空间,但对用户来说不是很易懂,如果需要对这些距离进行特定操作的话,也不太好索引。

MATLAB中可以用squareform把Y转换成方阵形式,方阵中位置的数值就是X中第i和第j点之间的距离,显然这个方阵应该是个对角元素为0的对称阵。

>>squareform(Y)

ans=

01.73941.02671.24421.55011.6883

1.739401.82771.96480.54012.9568

1.02671.827700.22281.37171.1377

1.24421.96480.222801.47901.0581

1.55010.54011.37171.479002.5092

1.68832.95681.13771.05812.50920

这里需要注意的是,pdist可以使用多种参数,指定不同的距离算法。

helppdist。

另外,当数据规模很大时,可以想象pdist产生的Y占用内存将是很吓人的,比如X有10k个数据点,那么X占10k*8*2Bytes=160K,这看起来不算啥,但是pdist后的Y会10k*10k/2*8Bytes=400M。

怕了把,所以,废话说在前面,用MATLAB的层次聚类来处理大规模数据,大概是很不合适的。

(2)确定好了对象间的差异度(距离)后,就可以用Z=linkage(Y)来产生层次聚类树了。

>>Z=linkage(Y)

Z=

3.00004.00000.2228

2.00005.00000.5401

1.00007.00001.0267

6.00009.00001.0581

8.000010.00001.3717

对于M个元素的X,前面说了Y是1行M*(M-1)/2的行向量,Z则是(M-1)*3的矩阵。

Z数组的前两列是索引下标列,最后一列是距离列。

例如上例中表示在产生聚类树的计算过程中,第3和第4点先聚成一类,他们之间的距离是0.2228,以此类推。

要注意的是,为了标记每一个节点,需要给新产生的聚类也安排一个标识,MATLAB中会将新产生的聚类依次用M+1,M+2,....依次来标识。

比如第3和第4点聚成的类以后就用7来标识,第2和第5点聚成的类用8来标识,依次类推。

通过linkage函数计算之后,实际上二叉树式的聚类已经完成了。

Z这个数据数组不太好看,可以用dendrogram(Z)来可视化聚类树。

可以看到,产生的聚类树的每一层都是一个倒置的U型(或者说是个n型,~~),纵轴高度代表了当前聚类中两个子节点之间的距离。

横轴上标记出了各个数据点索引下标。

稍微注意以下的是,dendrogram默认最多画30个最底层节点,当然可是设置参数改变这个限制,比如dendrogram(Z,0)就会把所有数据点索引下标都标出来,但对于成千上万的数据集合,这样的结果必然是图形下方非常拥挤。

看你的应用目的了,随你玩~

(3)初步的聚类树画完后,还要做很多后期工作的,包括这样的聚类是不是可靠,是不是代表了实际的对象分化模式,对于具体的应用,应该怎样认识这个完全版的聚类树,产生具有较少分叉的可供决策参考的分类结果呢?

这都是需要考虑的。

MATLAB中提供了cluster,clusterdata,cophenet,inconsistent等相关函数。

cluster用于剪裁完全版的聚类树,产生具有一定cutoff的可用于参考的树。

clusterdata可以认为是pdist,linkage,cluster的综合,当然更简易一点。

cophenet和inconsistent用来计算某些系数,前者用于检验一定算法下产生的二叉聚类树和实际情况的相符程度(就是检测二叉聚类树中各元素间的距离和pdist计算产生的实际的距离之间有多大的相关性),inconsistent则是量化某个层次的聚类上的节点间的差异性(可用于作为cluster的剪裁标准)。

 

例2在MATLAB中写一个名为opt_cluster_1的M文件:

x=[31.7;11;23;22.5;1.21;1.11.5;31];

y=pdist(x,'mahal');

yy=squareform(y)

z=linkage(y,'centroid')

h=dendrogram(z)

t=cluster(z,3)

其中:

“t=cluster(z,3)”表示分成3个聚类,需要分成几个由人工选择.存盘后按F5键执行,得到结果如下:

t=

3

1

2

2

1

1

3

即第1、第7样本点为第3类,第2、第5、第6样本点为第1类,第3、第4样本点为第2类.

 

设某地区有八个观测点的数据,样本距离矩阵如表1所示,根据最短距离法聚类分析。

%最短距离法系统聚类分析

X=[7.9039.778.4912.9419.2711.052.0413.29;

7.6850.3711.3513.319.2514.592.7514.87;

9.4227.938.208.1416.179.421.559.76;

9.1627.989.019.3215.999.101.8211.35;

10.0628.6410.5210.0516.188.391.9610.81];

BX=zscore(X);%标准化数据矩阵

Y=pdist(X)%用欧氏距离计算两两之间的距离

D=squareform(Y)%欧氏距离矩阵

Z=linkage(Y)%最短距离法

T=cluster(Z,3)等价于{T=clusterdata(X,3)}

find(T==3)%第3类集合中的元素

[H,T]=dendrogram(Z)%画聚类图

聚类谱系图如图1所示:

图1聚类谱系图

二、根据原始数据创建分类

在MATLAB软件包中,内部函数clusterdata对原始数据创建分类,格式有两种:

1)clusterdata(x,a),其中0

2)clusterdata(x,b),其中b>1是整数,表示将原始数据x分为b类.

例3在MATLAB中写一个名为opt_clusterdata_1的M文件:

x=[31.7;11;23;22.5;1.21;1.11.5;31];

t=clusterdata(x,0.5)

z=clusterdata(x,3)

存盘后按F5键执行,得到结果如下:

t=

4

3

2

2

3

1

4

z=

2

3

1

1

3

3

2

其中:

t的结果表示距离小于0.5的样本点归结为一类,这样,共有四类,第1类:

样本点6;第2类:

样本点3、4;第3类:

样本点2、5;第4类:

样本点1、7.

而z的结果表示首先约定将原始数据x分为3类,然后计算,结果如下:

第1类:

样本点3、4;第2类:

样本点1、7;第3类:

样本点2、5、6.

利用内部函数clusterdata对原始数据创建分类,其缺点是不能更改距离的计算法.比较好的方法是分步聚类法.

三、分步聚类法

假设有样本数据矩阵x,

第一步对于不同的距离,利用pdist函数计算样本点之间的距离:

y1=pdist(x)

y2=pdist(x,'seuclid')

y3=pdist(x,'mahal')

y4=pdist(x,'cityblock')

第二步计算系统聚类树以及相关信息:

z1=linkage(y1)

z2=linkage(y2)

z3=linkage(y3)

z4=linkage(y4)

第三步利用cophenet函数计算聚类树信息与原始数据的距离之间的相关性,这个值越大越好:

%cophenetCopheneticcorrelationcoefficient同表象相关系数,同型相关系数,共性分类相关系数CPCC

t1=cophenet(z1,y1)

t2=cophenet(z2,y2)

t3=cophenet(z3,y3)

t4=cophenet(z4,y4)

注:

z在前,y在后,顺序不能颠倒.

第四步选择具有最大的cophenet值的距离进行分类.

利用函数clusterdata(x,a)对数据x进行分类,其中0

例4在MATLAB中写一个名为opt_cluster_2的M文件:

x=[31.7;11;23;22.5;1.21;1.11.5;31];

y1=pdist(x);

y2=pdist(x,'seuclid');

y3=pdist(x,'mahal');

y4=pdist(x,'cityblock');

z1=linkage(y1);

z2=linkage(y2);

z3=linkage(y3);

z4=linkage(y4);

t1=cophenet(z1,y1)

t2=cophenet(z2,y2)

t3=cophenet(z3,y3)

t4=cophenet(z4,y4)

存盘后按F5键执行,得到结果如下:

t1=

0.9291

t2=

0.9238

t3=

0.9191

t4=

0.9242

结果中t1=0.9291最大,可见此例利用欧式距离最合适.于是,在MATLAB中另写一个名为opt_cluster_3的M文件:

x=[31.7;11;23;22.5;1.21;1.11.5;31];

y1=pdist(x);

z1=linkage(y1)

存盘后按F5键执行,得到结果如下:

z1=

2.00005.00000.2000

3.00004.00000.5000

6.00008.00000.5099

1.00007.00000.7000

9.000011.00001.2806

10.000012.00001.3454

矩阵z1的第1行表示样本点2、5为一类,在系统聚类树上的距离为0.2,其它类推.考察矩阵z1的第3列,系统聚类树上的6个距离,可以选择0.5作为聚类分界值.在MATLAB中另写一个名为opt_cluster_4的M文件:

x=[31.7;11;23;22.5;1.21;1.11.5;31];

y1=pdist(x);

z1=linkage(y1)

b1=cluster(z1,0.5)

存盘后按F5键执行,得到结果如下:

b1=

4

3

2

2

3

1

4

结果表示将原始数据x分为4类,第1类:

样本点6;第2类:

样本点3、4;第3类:

样本点2、5;第4类:

样本点1、7.

主要应用

商业

聚类分析被用来发现不同的客户群,并且通过购买模式刻画不同的客户群的特征。

聚类分析是细分市场的有效工具,同时也可用于研究消费者行为,寻找新的潜在市场、选择实验的市场,并作为多元分析的预处理。

生物

聚类分析被用来动植物分类和对基因进行分类,获取对种群固有结构的认识

地理

聚类能够帮助在地球中被观察的数据库商趋于的相似性

保险行业

聚类分析通过一个高的平均消费来鉴定汽车保险单持有者的分组,同时根据住宅类型,价值,地理位置来鉴定一个城市的房产分组

因特网

聚类分析被用来在网上进行文档归类来修复信息

电子商务

聚类分析在电子商务中网站建设数据挖掘中也是很重要的一个方面,通过分组聚类出具有相似浏览行为的客户,并分析客户的共同特征,可以更好的帮助电子商务的用户了解自己的客户,向客户提供更合适的服务。

例5下表是1999年中国省、自治区的城市规模结构特征的一些数据,可通过聚类分析将这些省、自治区进行分类,具体过程如下:

省、自治区

首位城市规模(万人)

城市首位度

四城市指数

基尼系数

城市规模中位值(万人)

京津冀

699.70

1.4371

0.9364

0.7804

10.880

山西

179.46

1.8982

1.0006

0.5870

11.780

内蒙古

111.13

1.4180

0.6772

0.5158

17.775

辽宁

389.60

1.9182

0.8541

0.5762

26.320

吉林

211.34

1.7880

1.0798

0.4569

19.705

黑龙江

259.00

2.3059

0.3417

0.5076

23.480

苏沪

923.19

3.7350

2.0572

0.6208

22.160

浙江

139.29

1.8712

0.8858

0.4536

12.670

安徽

102.78

1.2333

0.5326

0.3798

27.375

福建

108.50

1.7291

0.9325

0.4687

11.120

江西

129.20

3.2454

1.1935

0.4519

17.080

山东

173.35

1.0018

0.4296

0.4503

21.215

河南

151.54

1.4927

0.6775

0.4738

13.940

湖北

434.46

7.1328

2.4413

0.5282

19.190

湖南

139.29

2.3501

0.8360

0.4890

14.250

广东

336.54

3.5407

1.3863

0.4020

22.195

广西

96.12

1.2288

0.6382

0.5000

14.340

海南

45.43

2.1915

0.8648

0.4136

8.730

川渝

365.01

1.6801

1.1486

0.5720

18.615

云南

146.00

6.6333

2.3785

0.5359

12.250

贵州

136.22

2.8279

1.2918

0.5984

10.470

西藏

11.79

4.1514

1.1798

0.6118

7.315

陕西

244.04

5.1194

1.9682

0.6287

17.800

甘肃

145.49

4.7515

1.9366

0.5806

11.650

青海

61.36

8.2695

0.8598

0.8098

7.420

宁夏

47.60

1.5078

0.9587

0.4843

9.730

新疆

128.67

3.8535

1.6216

0.4901

14.470

x=load(‘data.txt’);

y1=pdi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1