资源描述:
《模糊聚类matlab程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、functionjulei(data)%%%%%%%%%%%%%%%模糊聚类%%%%%%%%%%%%%%%%%%%%%%%DATAFORCLUS=data;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基于模糊等价关系的模糊聚类%%%%%%%%%%%%%%%%%%%%%%%----------构造相似关系-----------%numrows=size(DATAFORCLUS,1);numcols=size(DATAFORCLUS,2);disp('请选择对象之间相似性统计量的方式:');d
2、isp('<1-相关系数法
3、2-夹角余弦法>');wayforr_ij=input('请输入:');switchwayforr_ijcase1,%-----------------------------------相关系数法fori=1:numrows,forj=1:numrows,meani=mean(DATAFORCLUS(i,:));meanj=mean(DATAFORCLUS(j,:));simiR(i,j)=sum((DATAFORCLUS(i,:)-meani).*(DATAFORCLUS
4、(j,:)-meanj))/...(sqrt(sum((DATAFORCLUS(i,:)-meani).^2))*sqrt(sum((DATAFORCLUS(j,:)-meanj).^2)));endendcase2,%-----------------------------------夹角余弦法fori=1:numrows,forj=1:numrows,simiR(i,j)=sum(DATAFORCLUS(i,:).*DATAFORCLUS(j,:))/...(sqrt(sum(DATAFORCLU
5、S(i,:).*DATAFORCLUS(i,:)))*sqrt(sum(DATAFORCLUS(j,:).*DATAFORCLUS(j,:))));endendend%-------改造成等价关系----------%sign=0;numselfmul=1;simiRk=eye(numrows);equi_tem=simiR;whilesign==0,fori=1:numrows,forj=1:numrows,forc=1:numrows,rij_temp(c)=min([equi_tem(i,c)eq
6、ui_tem(c,j)]);endsimiRk(i,j)=max(rij_temp);endend%--------------%ifsum(sum(simiRk-equi_tem,1))~=0,numselfmul=numselfmul+1;equi_tem=simiRk;elsesign=1;breakend%--------------%endifsign==1,disp('从相似矩阵到等价矩阵改造成功!!!');elsedisp('从相似矩阵到等价矩阵改造失败!!!');endequiR=sim
7、iRk;numclass=input('请输入聚类数:');%---------在不同的截集水平进行聚类--------------%clasc=0;comp_vec(1,1:numrows)=0;index=0;clasc=0;tip=0;alpha=0;temnumeachclass=0;while(tip==0),%alpha=input('请输入进行分类的截集水平λ:');%alpha=0.5;%调试if(alpha<0
8、
9、alpha>1),error('您输入的截集水平λ不符合分类要求->执行
10、结束!!!');endcomp_arr=ones(numrows)*alpha;result_arr=(equiR>=comp_arr);%--------------------result_arr判断矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%捡菜算法fori=1:numrows,ifsum(comp_vec(1,:)==result_arr(i,:))11、;%numeachclass(clasc)=index-temnumeachclass;temsave=result_arr(i,:);forj=1:numrows,ifsum(result_arr(j,:)==temsave)==numrows,index=index+1;class(index)=j;result_arr(j,:)=0;%--------------------说明已经被归类temnumeachclass=temnume