聚类分析Word文件下载.docx
- 文档编号:19193982
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:19
- 大小:111.53KB
聚类分析Word文件下载.docx
《聚类分析Word文件下载.docx》由会员分享,可在线阅读,更多相关《聚类分析Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
这是受相似性几何原理启发而产生的一种标准,在识别图像和文字时,常用夹角余弦为标准.
7)相似距离
二、MATLAB中常用的计算距离的函数
假设我们有
,每一行是一个样本数据.在MATLAB中计算样本点之间距离的内部函数为
y=pdist(x)计算样本点之间的欧氏距离
y=pdist(x,'
seuclid'
)计算样本点之间的标准化欧氏距离
mahal'
)计算样本点之间的马氏距离
cityblock'
)计算样本点之间的布洛克距离
minkowski'
)计算样本点之间的闵可夫斯基距离
p)计算样本点之间的参数为p的闵可夫斯基距离
cosine'
)计算样本点之间的余弦距离
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'
)表示用最长距离法创建系统聚类树
average'
)表示用平均距离法创建系统聚类树
centroid'
)表示用重心距离法创建系统聚类树
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];
%每行一个样本
);
每两个样本的马氏距离,1-2…1-72-32-4….
yy=squareform(y)%,样本点之间的距离用矩阵的形式输出
%用重心距离法创建系统聚类树
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转换成方阵形式,方阵中<
i,j>
位置的数值就是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文件:
yy=squareform(y)
)
h=dendrogram(z)
t=cluster(z,3)
“t=cluster(z,3)”表示分成3个聚类,需要分成几个由人工选择.存盘后按F5键执行,得到结果如下:
t=
3
1
2
即第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<
a<
1,表示在系统聚类树中距离小于a的样本点归结为一类;
2)clusterdata(x,b),其中b>
1是整数,表示将原始数据x分为b类.
例3在MATLAB中写一个名为opt_clusterdata_1的M文件:
t=clusterdata(x,0.5)
z=clusterdata(x,3)
4
t的结果表示距离小于0.5的样本点归结为一类,这样,共有四类,第1类:
样本点6;
第2类:
样本点3、4;
第3类:
样本点2、5;
第4类:
样本点1、7.
而z的结果表示首先约定将原始数据x分为3类,然后计算,结果如下:
第1类:
样本点1、7;
样本点2、5、6.
利用内部函数clusterdata对原始数据创建分类,其缺点是不能更改距离的计算法.比较好的方法是分步聚类法.
三、分步聚类法
假设有样本数据矩阵x,
第一步对于不同的距离,利用pdist函数计算样本点之间的距离:
y1=pdist(x)
y2=pdist(x,'
y3=pdist(x,'
y4=pdist(x,'
第二步计算系统聚类树以及相关信息:
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<
1,表示在系统聚类树中距离小于a的样本点归结为一类.
例4在MATLAB中写一个名为opt_cluster_2的M文件:
y1=pdist(x);
z1=linkage(y1);
z2=linkage(y2);
z3=linkage(y3);
z4=linkage(y4);
t1=
0.9291
t2=
0.9238
t3=
0.9191
t4=
0.9242
结果中t1=0.9291最大,可见此例利用欧式距离最合适.于是,在MATLAB中另写一个名为opt_cluster_3的M文件:
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文件:
b1=cluster(z1,0.5)
b1=
4
3
2
3
1
结果表示将原始数据x分为4类,第1类:
主要应用
商业
聚类分析被用来发现不同的客户群,并且通过购买模式刻画不同的客户群的特征。
聚类分析是细分市场的有效工具,同时也可用于研究消费者行为,寻找新的潜在市场、选择实验的市场,并作为多元分析的预处理。
生物
聚类分析被用来动植物分类和对基因进行分类,获取对种群固有结构的认识
地理
聚类能够帮助在地球中被观察的数据库商趋于的相似性
保险行业
聚类分析通过一个高的平均消费来鉴定汽车保险单持有者的分组,同时根据住宅类型,价值,地理位置来鉴定一个城市的房产分组
因特网
聚类分析被用来在网上进行文档归类来修复信息
电子商务
聚类分析在电子商务中网站建设数据挖掘中也是很重要的一个方面,通过分组聚类出具有相似浏览行为的客户,并分析客户的共同特征,可以更好的帮助电子商务的用户了解自己的客户,向客户提供更合适的服务。
例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
湖南
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 聚类分析