分裂层次聚类matlab实现,凝聚层次聚类算法matlab源码

《凝聚层次聚类算法matlab源码》由会员分享,可在线阅读,更多相关《凝聚层次聚类算法matlab源码(3页珍藏版)》请在人人文库网上搜索。

1、共享一个在数据挖掘课程中作为示例使用的凝聚层次聚类算法源码,供大家学习交流使用时将源码复制进一个新的Function并更改m文件的文件名为AGNES即可-2016 年4月10 日 以下为程序的 matlab 源码:function cluster=AGNES(pointSet,targetClusterNum,method)% 凝聚层次聚类算法% 输入:点集 pointSet 、目标簇数 targetClusterNum 、簇间差异度度量方式 method% 点集 pointSet为n*m矩阵,包含n个点,每个点有 m个属性% 目标簇数 targetClusterNum 为一个整数, 0tar。

2、getClusterNumn% method 为字符串,对应不同距离度量方式:% method=min:最小距离度量 ;method=max:最大距离度量 ;method=mean:均值距离度量;method=avg:平均距离度量 ;% 输出: cluster为长度为n的向量,表示各点所对应簇的类别标记% 调用方式示例:cluster=AGNES(pointSet,3,max);% 表示将 pointSet使用最大距离度量方式聚为 3 个类,将通过 cluster 变量返回类标记pointNum=size(pointSet,1);cluster=1:pointNum;%每个点对应簇标记%当前簇。

3、数目。初始默认每个点为单独的一个簇%若聚类数满足结束条件则算法结束i=0; while true i=i+1; uniCluster=unique(cluster); clusterNum=size(uniCluster,2);if clusterNum=targetClusterNum break ;end%计算簇间差异度clusterDist=zeros(clusterNum);if strcmp(method, mean )=1 %计算各簇间差异度:平均距离 clusterMean=;for c=1:clusterNum%计算各簇均值uniCluster=unique(cluster);。

4、 subCluster=pointSet(cluster=uniCluster(c),:); clusterMean=clusterMean;uniCluster(c),mean(subCluster,1);endfor d=1:size(clusterMean,1)%计算各簇间距离clusterDist(:,d)=sqrt(sum(clusterMean(:,2:end)-repmat(clusterMean(d,2:en d),size(clusterMea 门,1),1).人2,2);endclusterDist=clusterDist+eye(size(clusterDist,1)*m。

5、ax(max(clusterDist)*100; %将对角线设为最大值elseif strcmp(method, min )=1 %计算各簇间差异度:最小距离for c1=1:clusterNumfor c2=c1+1:clusterNum subPointSet1=pointSet(cluster=uniCluster(c1),:); subPointSet2=pointSet(cluster=uniCluster(c2),:); subPointSet1Expend=;for c3=1:size(subPointSet1,1) subPointSet1Expend=subPointSet1。

6、Expend;repmat(subPointSet1(c3,:),size(s ubPointSet2,1),1);end subPointSet2Expend=repmat(subPointSet2,size(subPointSet1,1),1);dist=sqrt(sum(subPoi ntSetlExpe nd-subPoi ntSet2Expe nd).A2,2); clusterDist(c1,c2)=min(dist);%取最小值endend clusterDist=clusterDist+clusterDist;%将三角阵转换为对称阵clusterDist=clusterDist。

7、+eye(size(clusterDist,1)*max(max(clusterDist)*100; %将对角线设为最大值elseif strcmp(method, max )=1 %计算各簇间差异度:最大距离for c1=1:clusterNumfor c2=c1+1:clusterNum subPointSet1=pointSet(cluster=uniCluster(c1),:); subPointSet2=pointSet(cluster=uniCluster(c2),:); subPointSet1Expend=;for c3=1:size(subPointSet1,1) subPo。

8、intSet1Expend=subPointSet1Expend;repmat(subPointSet1(c3,:),size(s ubPointSet2,1),1);endsubPointSet2Expend=repmat(subPointSet2,size(subPointSet1,1),1);dist=sqrt(sum(subPoi ntSetlExpe nd-subPoi ntSet2Expe nd).A2,2); clusterDist(c1,c2)=max(dist);%取最大值endend clusterDist=clusterDist+clusterDist;clusterDi。

9、st=clusterDist+eye(size(clusterDist,1)*max(max(clusterDist)* 100;elseif strcmp(method, avg )=1 %计算各簇间差异度:均值距离for c1=1:clusterNumfor c2=c1+1:clusterNum subPointSet1=pointSet(cluster=uniCluster(c1),:); subPointSet2=pointSet(cluster=uniCluster(c2),:); subPointSet1Expend=;for c3=1:size(subPointSet1,1) s。

10、ubPointSet1Expend=subPointSet1Expend;repmat(subPointSet1(c3,:),size(s ubPointSet2,1),1);endsubPointSet2Expend=repmat(subPointSet2,size(subPointSet1,1),1);dist=sqrt(sum(subPoi ntSetlExpe nd-subPoi ntSet2Expe nd).A2,2); clusterDist(c1,c2)=sum(dist)./size(dist,1);endend clusterDist=clusterDist+clusterDist;clusterDist=clusterDist+eye(size(clusterDist,1)*max(max(clusterDist)*100;end%合并相异度最小的两个簇rows,cols=find(clusterDist=min(min(clusterDist);两个簇index=rows,cols;%合并两个最相似的簇from=index(1,1);to=index(1,2);cluster(cluster=uniCluster(from)=uniCluster(to);end%取均值%找到相异度最小的end。

你可能感兴趣的:(分裂层次聚类matlab实现)