Kmeans算法matlab的实现.docx
- 文档编号:10879456
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:16
- 大小:253.01KB
Kmeans算法matlab的实现.docx
《Kmeans算法matlab的实现.docx》由会员分享,可在线阅读,更多相关《Kmeans算法matlab的实现.docx(16页珍藏版)》请在冰豆网上搜索。
Kmeans算法matlab的实现
算法流程图
三、实验源代码
1、主程序
clearall
clc
[FHFW]=textread('C:
\Users\lenvo\Desktop\н¨Îļþ¼Ð\FEMALE.txt','%f%f');
[MHMW]=textread('C:
\Users\lenvo\Desktop\н¨Îļþ¼Ð\MALE.txt','%f%f');
Data(1:
50,1)=FH;Data(51:
100,1)=MH;
Data(1:
50,2)=FW;Data(51:
100,2)=MW;
C=input('ÊäÈëC£º')
[U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(Data,C)
plot(Data(:
1),Data(:
2),'o');
holdon;
maxU=max(U);
index1=find(U(1,:
)==maxU);
index2=find(U(2,:
)==maxU);
line(Data(index1,1),Data(index1,2),'marker','*','color','g');
line(Data(index2,1),Data(index2,2),'marker','*','color','r');
plot([P([12],1)],[P([12],2)],'*','color','k')
holdoff;
2、子程序
function[U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(Data,C,plotflag,M,epsm)
ifnargin<5
epsm=1.0e-6;
end
ifnargin<4
M=2;
end
ifnargin<3
plotflag=0;
end
[N,S]=size(Data);m=2/(M-1);iter=0;
Dist(C,N)=0;U(C,N)=0;P(C,S)=0;
U0=rand(C,N);
U0=U0./(ones(C,1)*sum(U0));
¨
whiletrue
iter=iter+1;
Um=U0.^M;
P=Um*Data./(ones(S,1)*sum(Um'))';
fori=1:
C
forj=1:
N
Dist(i,j)=fuzzydist(P(i,:
),Data(j,:
));
end
end
U=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m))));
ifnargout>4|plotflag
Obj_Fcn(iter)=sum(sum(Um.*Dist.^2));
end
ifnorm(U-U0,Inf) break end U0=U; end ifnargout>3 res=maxrowf(U); forc=1: C v=find(res==c); Cluster_Res(c,1: length(v))=v; end end ifplotflag fcmplot(Data,U,P,Obj_Fcn); end function[U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm2(Data,P0,plotflag,M,epsm) ifnargin<5 epsm=1.0e-6; end ifnargin<4 M=2; end ifnargin<3 plotflag=0; end [N,S]=size(Data);m=2/(M-1);iter=0; C=size(P0,1);Dist(C,N)=0;U(C,N)=0;P(C,S)=0; whiletrue iter=iter+1; fori=1: C forj=1: N Dist(i,j)=fuzzydist(P0(i,: ),Data(j,: )); end end U=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m)))); Um=U.^M; P=Um*Data./(ones(S,1)*sum(Um'))'; ifnargout>4|plotflag Obj_Fcn(iter)=sum(sum(Um.*Dist.^2)); end ifnorm(P-P0,Inf) break end P0=P; end ifnargout>3 res=maxrowf(U); forc=1: C v=find(res==c); Cluster_Res(c,1: length(v))=v; end end ifplotflag fcmplot(Data,U,P,Obj_Fcn); end functionf=addr(a,strsort) ifnargin==1 strsort='ascend'; end sa=sort(a);ca=a; la=length(a);f(la)=0; fori=1: la f(i)=find(ca==sa(i),1); ca(f(i))=NaN; end ifstrcmp(strsort,'descend') f=fliplr(f); end functionellipse(a,b,center,style,c_3d) ifnargin<4 style='b'; end ifnargin<3|isempty(center) center=[0,0]; end t=1: 360; x=a/2*cosd(t)+center (1); y=b/2*sind(t)+center (2); ifnargin>4 plot3(x,y,ones(1,360)*c_3d,style) else plot(x,y,style) end functionfcmplot(Data,U,P,Obj_Fcn) [C,S]=size(P);res=maxrowf(U); str='po*x+d^v><.h'; figure (1),plot(Obj_Fcn) title('Ä¿±êº¯ÊýÖµ±ä»¯ÇúÏß','fontsize',8) ifS==2 figure (2),plot(P(: 1),P(: 2),'rs'),holdon fori=1: C v=Data(find(res==i),: ); plot(v(: 1),v(: 2),str(rem(i,12)+1)) ellipse(max(v(: 1))-min(v(: 1)),... max(v(: 2))-min(v(: 2)),... [max(v(: 1))+min(v(: 1)),... max(v(: 2))+min(v(: 2))]/2,'r: ') end gridon,title('2D¾ÛÀà½á¹ûͼ','fontsize',8),holdoff end ifS>2 figure (2),plot3(P(: 1),P(: 2),P(: 3),'rs'),holdon fori=1: C v=Data(find(res==i),: ); plot3(v(: 1),v(: 2),v(: 3),str(rem(i,12)+1)) ellipse(max(v(: 1))-min(v(: 1)),... max(v(: 2))-min(v(: 2)),... [max(v(: 1))+min(v(: 1)),... max(v(: 2))+min(v(: 2))]/2,... 'r: ',(max(v(: 3))+min(v(: 3)))/2) end gridon,title('3D¾ÛÀà½á¹ûͼ','fontsize',8),holdoff end functionD=fuzzydist(A,B) D=norm(A-B); functionmr=maxrowf(U,c) ifnargin<2 c=1; end N=size(U,2);mr(1,N)=0; forj=1: N aj=addr(U(: j),'descend'); mr(j)=aj(c); end 四、实验结果 1、FEMALE和MALE (1)C=2,Z1 (1)=(173,53)T,Z2 (1)=(168,57)T。 聚类中心为(163.322052.5232),(175.256567.6907) 迭代次数为28 (2)C=2,Z1 (1)=(173,53)T,Z2 (1)=(160,58)T。 聚类中心为(163.322052.5232),(175.256567.6907) 迭代次数为28 (3)C=3,Z1 (1)=(173,53)T,Z2 (1)=(168,57)TZ3 (1)=(160,58)T 聚类中心为(168.413957.3300)(176.335169.4859) (160.176749.1940) 迭代次数为41 (4)C=3,Z1 (1)=(173,53)T,Z2 (1)=(168,57)TZ3 (1)=(161,45)T 聚类中心为(168.413957.3300)(176.335169.4859) (160.176749.1940) 迭代次数为41 2、test2 (1)C=2,Z1 (1)=(173,53)T,Z2 (1)=(168,57)T。 聚类中心为(166.844354.9270),(176.677270.7966) 迭代次数为53 (2)C=2,Z1 (1)=(173,53)T,Z2 (1)=(160,58)T。 聚类中心为(166.844354.9270),(176.677270.7966) 迭代次数为53 (3)C=3,Z1 (1)=(173,53)T,Z2 (1)=(168,57)TZ3 (1)=(160,58)T 聚类中心为(178.869980.0977)(163.946951.6216) (174.814464.8963) 迭代次数为56 (4)C=3,Z1 (1)=(173,53)T,Z2 (1)=(168,57)TZ3 (1)=(161,45)T 聚类中心为(178.869980.0977)(163.946951.6216) (174.814464.8963) 迭代次数为56 结论 (一): 初始均值设置的不同会影响迭代的次数以及各次迭代所产生的聚类中心,但它不会影响最后的分类结果。 结论 (二): 数据的输入顺序不同,同样影响迭代次数,而对聚类结果没有太大的影响。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Kmeans 算法 matlab 实现