- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
共享一个在数据挖掘课程中作为示例使用的凝聚层次聚类算法源码,供大家学习交流
使用时将源码复制进一个新的 Function 并更改m文件的文件名为AGNES即可
--2016 年4月10 日 以下为程序的 matlab 源码:
function [cluster]=AGNES(pointSet,targetClusterNum,method)
% 凝聚层次聚类算法
% 输入:点集 pointSet 、目标簇数 targetClusterNum 、簇间差异度度量方式 method
% 点集 pointSet
为n*m矩阵,包含n个点,每个点有 m个属性
% 目标簇数 targetClusterNum 为一个整数, 0targetClusterNumn
% 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; %每个点对应簇标记
%当前簇数目。初始默认每个点为单独的一个簇
%当前簇数目。初始默认每个点为单独的一个簇
%若聚类数满足结束条件则算法结束
if clusterNum=targetClusterNum break ;
end
%计算簇间差异度
clusterDist=zeros(clusterNum);
if strcmp(method, mean )==1 %计算各簇间差异度:平均距离 clusterMean=[];
for c=1:clusterNum %计算各簇均值
uniCluster=unique(cluster); subCluster=pointSet(cluster==uniCluster(c),:); clusterMean=[clusterMean;uniCluster(c),mean(subCluster,1)];
end
for d=1:size(clusterMean,1) %计算各簇间距离
clusterDist(:,d)=sqrt(sum((clusterMean(:,2:end)-repmat(clusterMean(d,2:
en d),size(clusterMea 门,1),1)).人2,2));
end
clusterDist=clusterDist+eye(size(clusterDist,1))*max(max(clusterDist))*
100; %将对角线设为最大值
elseif strcmp(method, min )==1 %计算各簇间差异度:最小距离
for c1=1:clusterNum
for c2=c1+1:clusterNum subPointSet1=pointSet(cluster==uniCluster(c1),:); subPointSet2=pointSet(cluster==uniCluster(c2),:); subPointSet1Expend=[];
for c3=1:size(subPointSet1,1) subPointSet1Expend=[subPointSet1Expend;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); %取最小值
end
end clusterDist=clusterDist+clusterDist; %将三角阵转换为对称阵
clusterDist=clusterDist+eye(size(clusterDist,1))*max(max(clusterDist))*
100; %将对角线设为最大值
elseif strcmp(method, max )==1 %计算各簇间差异度:最大距离
for c1=1:clusterNum
for c2=c1+1:clusterNum subPointSet1=pointSet(clust
文档评论(0)