matlab做聚类分析
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);
分类结果:{matlab直方图加拿大},{中国,美国,澳大利亚},{日本,印尼},{巴西},{前苏联}
剩余的为一类。
MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法:
1.层次聚类 hierarchical clustering
1.层次聚类 hierarchical clustering
2.k-means聚类
这里用最简单的实例说明以下层次聚类原理和应用发法。
层次聚类是基于距离的聚类方法,MATLAB中通过pdist、linkage、dendrogram、cluster等函数
来完成。层次聚类的过程可以分这么几步:
(1) 确定对象(实际上就是数据集中的每个数据点)之间的相似性,实际上就是定义一个表征对象之间差异的距离,例如最简单的平面上点的聚类中,最经常使用的就是欧几里得距离。
这在MATLAB中可以通过Y=pdist(X)实现,例如
>> X=randn(6,2)
>> X=randn(6,2)
X =
-0.4326 1.1892
-1.6656 -0.0376
0.1253 0.3273
0.2877 0.1746
-1.1465 -0.1867
1.1909 0.7258
>> plot(X(:,1),X(:,2),'bo') %给个图,将来对照聚类结果把
-0.4326 1.1892
-1.6656 -0.0376
0.1253 0.3273
0.2877 0.1746
-1.1465 -0.1867
1.1909 0.7258
>> plot(X(:,1),X(:,2),'bo') %给个图,将来对照聚类结果把
>> Y=pdist(X)
Y =
Y =
Columns 1 through 14
1.7394 1.0267 1.2442 1.5501 1.6883 1.8277 1.9648 0.5401
1.7394 1.0267 1.2442 1.5501 1.6883 1.8277 1.9648 0.5401
2.9568 0.2228 1.3717 1.1377 1.4790 1.0581
Column 15
2.5092
例子中X数据集可以看作包含6个平面数据点,pdist之后的Y是一个行向量,15个元素分别代表X的第1点与2-6点、第2点与3-6点,......这样的距离。那么对于M个点的数据集X,pdist之后的Y
Column 15
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点之间的距离,显然这个方阵应该是
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论