实验三K-Means聚类算法一、实验目的1)加深对非监督学习的理解和认识2)掌握动态聚类方法K-Means算法的设计方法二、实验环境1)具有相关编程软件的PC机三、实验原理1)非监督学习的理论基础2)动态聚类分析的思想和理论依据3)聚类算法的评价指标四、算法思想K-均值算法的主要思想是先在需要分类的数据中寻找K组数据作为初始聚类中心,然后计算其他数据距离这三个聚类中心的距离,将数据归入与其距离最近的聚类中心,之后再对这K个聚类的数据计算均值,作为新的聚类中心,继续以上步骤,直到新的聚类中心与上一次的聚类中心值相等时结束算法。实验代码functionkm(k,A)%函数名里不要出现“-”warningoff[n,p]=size(A);%输入数据有n个样本,p个属性cid=ones(k,p+1);%聚类中心组成k行p列的矩阵,k表示第几类,p是属性%A(:,p+1)=100;A(:,p+1)=0;fori=1:k%cid(i,:)=A(i,:);%直接取前三个元祖作为聚类中心m=i*floor(n/k)-floor(rand(1,1)*(n/k))cid(i,:)=A(m,:);cid;endAsum=0;Csum2=NaN;flags=1;times=1;whileflagsflags=0;times=times+1;%计算每个向量到聚类中心的欧氏距离fori=1:nforj=1:kdist(i,j)=sqrt(sum((A(i,:)-cid(j,:)).^2));%欧氏距离end%A(i,p+1)=min(dist(i,:));%与中心的最小距离[x,y]=find(dist(i,:)==min(dist(i,:)));[c,d]=size(find(y==A(i,p+1)));ifc==0%说明聚类中心变了flags=flags+1;A(i,p+1)=y(1,1);elsecontinue;endendiflagsforj=1:kAsum=0;[r,c]=find(A(:,p+1)==j);cid(j,:)=mean(A(r,:),1);form=1:length(r)Asum=Asum+sqrt(sum((A(r(m),:)-cid(j,:)).^2));endCsum(1,j)=Asum;endsum(Csum(1,:))%ifsum(Csum(1,:))Csum2%break;%endCsum2=sum(Csum(1,:));Csum;cid;%得到新的聚类中心endtimesdisplay('A矩阵,最后一列是所属类别');Aforj=1:k[a,b]=size(find(A(:,p+1)==j));numK(j)=a;endnumKtimesxlswrite('',A);五、算法流程图开始读入要分类的数据设置初始聚类中心计算数据到K个聚类中心的距离将数据分入与其距离最小的聚类计算新的聚类中心聚类中心是否收敛?否输出K个分类好的聚类结束是六、实验结果Kmeans6iterations,totalsumofdistances=10iterations,totalsumofdistances=16iterations,totalsumofdistances=9iterations,totalsumofdistances=........9iterations,totalsumofdistances=8iterations,totalsumofdistances=8iterations,totalsumofdistances=14iterations,totalsumofdistances=14iterations,totalsumofdistances=6iterations,totalsumofdistances=Ctrs=SumD=七、实验心得初始的聚类中心的不同,对聚类结果没有很大的影响,而对迭代次数有显着的影响。数据的输入顺序不同,同样影响迭代次数,而对聚类结果没有太大的影响。