层次聚类的Matlab实现代码

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

最近需要用到层次聚类,发现在Matlab上很容易实现,下面是代码加详细注释

clear allclcclose allmdist=input('输入坐标文件名字\n');disp('读取数据坐标')%获取坐标%文件为二维的坐标,第一列为x轴坐标,第二列为y轴坐标xx=load(mdist);%获取数据的个数存至number[number, row]=size(xx);%获取距离矩阵,第二参数指定距离计算方法%可选参数有'euclidean':欧氏距离(默认);'seuclidean':标准化欧氏距离;%'mahalanobis':马氏距离;'cityblock':布洛克距离;'minkowski':明可夫斯基距离;%'cosine':余弦距离 'correlation':相关性 'hamming':汉明距离 'jaccard':Jaccard相似度%'chebychev':Chebychev距离。yy=pdist(xx,'euclidean');%获取聚类,第二参数指定层次聚类方式%'single':单连通,最短距离法(默认);'complete':全连通,最长距离法;'average':未加权平均距离法; %'weighted': 加权平均法;'centroid': 质心距离法;'median':加权质心距离法;'ward':内平方距离法(最小方差算法)zz=linkage(yy,'single');%指定获取簇类个数Ncluster=input('输入类个数\n');%获取指定Ncluster个数的聚类结果c = cluster( zz,'maxclust', Ncluster );  %获取绘图所需颜色%需要用到linspecer.m文件%下载地址%http://www.mathworks.com/matlabcentral/fileexchange/42673-beautiful-and-distinguishable-line-colors-+-colormap if(Ncluster>12) Color = linspecer( Ncluster ); else     Color = linspecer( Ncluster, 'qualitative' );     end       for i=1:Ncluster     for j = 1:number     if(c(j) == i)         hold on     plot(xx(j,1),xx(j,2),'o','MarkerFaceColor',Color(i,:),'MarkerEdgeColor',Color(i,:))     end     end  end

参考资料:

http://www.cnblogs.com/blessw/archive/2010/03/27/1698635.html

如果本文对你有帮助,不妨扫码请笔者喝杯茶

点这里可以跳转到人工智能网站