1、题目:对数据进行聚类分析的实验(五)一、基本要求用FAMALE.TXT、MALE.TXT和test2.txt的数据作为本次实验使用的样本集,利用C均值和分级聚类方法对样本集进行聚类分析,对结果进行分析,从而加深对所学内容的理解和感性认识。二、 主要思想1、把FAMALE.TXT和MALE.TXT两个文件合并成一个,同时采用身高和体重数据作为特征,设类别数为2,利用C均值聚类方法对数据进行聚类,并将聚类结果表示在二维平面上。尝试不同初始值对此数据集是否会造成不同的结果。2、对1中的数据利用C均值聚类方法分别进行两类、三类、四类、五类聚类,画出聚类指标与类别数之间的关系曲线,探讨是否可以确定出合理
2、的类别数目。3、对1中的数据利用分级聚类方法进行聚类,分析聚类结果,体会分级聚类方法。4、利用test2.txt数据或者把test2.txt的数据与上述1中的数据合并在一起,重复上述实验,考察结果是否有变化,对观察到的现象进行分析,写出体会。三、 实验原理1、 C均值聚类方法(1)C均值算法思想基于使聚类性能指标最小化,所用的聚类准则函数是聚类 集中每一个样本点到该类中心的距离平方之和,并使其最小化。 (2)C均值算法步骤: 1、任选C个初始聚类中心 。一般以开头C个样本作为初始中心。 2、将模式样本集的每一样本按最小距离原则分配给C个聚类中心,即在第m次迭代时,若则, , 表示第m次迭代时,
3、以第j个聚类中心为代表的聚类域3由步骤2计算新的聚类中心,即: 式中Ni为第i个聚类域 中的样本个数。其均值向量作为新的聚类中心,因为这样可以使误差平方和准则函数: 达到最小值。4若 ,算法收敛,计算完毕。否则返回到步骤2,进行下一次迭代。 (3)算法流程图开 始读入要分类的数据设置初始聚类中心计算数据到C个聚类中心的距离将数据分入与其距离最小的聚类计算新的聚类中心聚类中心是否收敛?否输出C个分类好的聚类结 束是四、 实验源代码1、主程序clear allclcFH FW=textread(C:UserslenvoDesktopFEMALE.txt,%f %f);MH MW=textread(
4、C:UserslenvoDesktopMALE.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); hold on; maxU = max(U); index1 = find(U(1,:) = maxU); index2 = find(U(2,:) = maxU); line(Data(index1,1),Data
5、(index1,2),marker,*,color,g); line(Data(index2,1),Data(index2,2),marker,*,color,r); plot(P(1 2,1),P(1 2,2),*,color,k) hold off; 2、子程序function U,P,Dist,Cluster_Res,Obj_Fcn,iter=fuzzycm(Data,C,plotflag,M,epsm)if nargin5 epsm=1.0e-6; endif nargin4 M=2;endif nargin4 | plotflag Obj_Fcn(iter)=sum(sum(Um.*
6、Dist.2); end % FCM if norm(U-U0,Inf) 3 res = maxrowf(U); for c = 1:C v = find(res=c); Cluster_Res(c,1:length(v)=v; endendif plotflag fcmplot(Data,U,P,Obj_Fcn);endfunction U,P,Dist,Cluster_Res,Obj_Fcn,iter=fuzzycm2(Data,P0,plotflag,M,epsm)if nargin5 epsm=1.0e-6; endif nargin4 M=2;endif nargin4 | plot
7、flag Obj_Fcn(iter)=sum(sum(Um.*Dist.2); end if norm(P-P0,Inf) 3 res = maxrowf(U); for c = 1:C v = find(res=c); Cluster_Res(c,1:length(v)=v; endendif plotflag fcmplot(Data,U,P,Obj_Fcn);endfunction f = addr(a,strsort)if nargin=1 strsort=ascend;endsa=sort(a); ca=a;la=length(a);f(la)=0;for i=1:la f(i)=f
8、ind(ca=sa(i),1); ca(f(i)=NaN;endif strcmp(strsort,descend) f=fliplr(f);end function ellipse(a,b,center,style,c_3d)if nargin4 style=b;endif nargin4 plot3(x,y,ones(1,360)*c_3d,style)else plot(x,y,style)endfunction fcmplot(Data,U,P,Obj_Fcn)% FCM % See also: fuzzycm maxrowf ellipseC,S = size(P); res = m
9、axrowf(U);str = po*x+dv2 figure(2),plot3(P(:,1),P(:,2),P(:,3),rs),hold on for i=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 grid o
10、n,title(3D ,fontsize,8),hold offend function D=fuzzydist(A,B)D=norm(A-B);function mr=maxrowf(U,c)if nargin2 c=1;endN=size(U,2);mr(1,N)=0;for j=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.3220 52.5232),( 175.2565 67.6907)迭代次数为28
11、(2)C=2, Z1(1)=(173,53)T, Z2(1)=(160,58)T。聚类中心为(163.3220 52.5232),( 175.2565 67.6907)迭代次数为28(3)C=3, Z1(1)=(173,53)T, Z2(1)=(168,57)T Z3(1)=(160,58)T聚类中心为(168.4139 57.3300)(176.3351 69.4859) (160.1767 49.1940)迭代次数为41(4)C=3, Z1(1)=(173,53)T, Z2(1)=(168,57)T Z3(1)=(161,45)T聚类中心为(168.4139 57.3300)(176.33
12、51 69.4859) (160.1767 49.1940)迭代次数为412、test2(1)C=2, Z1(1)=(173,53)T, Z2(1)=(168,57)T。聚类中心为(166.8443 54.9270),(176.6772 70.7966)迭代次数为53(2)C=2, Z1(1)=(173,53)T, Z2(1)=(160,58)T。聚类中心为(166.8443 54.9270),(176.6772 70.7966)迭代次数为53(3)C=3, Z1(1)=(173,53)T, Z2(1)=(168,57)T Z3(1)=(160,58)T聚类中心为(178.8699 80.09
13、77)(163.9469 51.6216) (174.8144 64.8963)迭代次数为56(4)C=3, Z1(1)=(173,53)T, Z2(1)=(168,57)T Z3(1)=(161,45)T聚类中心为(178.8699 80.0977)(163.9469 51.6216)(174.8144 64.8963) 迭代次数为56结论(一):初始均值设置的不同会影响迭代的次数以及各次迭代所产生的聚类中心,但它不会影响最后的分类结果。 结论(二):数据的输入顺序不同,同样影响迭代次数,而对聚类结果没有太大的影响。六、心得体会经过这次实验,我感到自己还是学到了很多的东西,对于模式识别而言也有了更进一步的了解和加深。知道自己该通过哪些步骤来达到自己的目的。另外,通过实验我们也熟悉了对MATLAB等软件的使用,为以后的工作打下了坚实的基础。同时也通过编程,加深了C均值算法的过程。