您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > matlab实现Kmeans聚类算法
kmeans函数:输入为类别数量k和数据矩阵A;输出为聚类结果A,和迭代次数,并将聚类结果数据以excel形式保存在工作路径下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('data.xls',A);%把矩阵A写到excel文件中,保存在工作路径下display('数据已保存为excel格式');
本文标题:matlab实现Kmeans聚类算法
链接地址:https://www.777doc.com/doc-6082441 .html