赞
踩
k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是以下任何一个:
1)没有(或最小数目)对象被重新分配给不同的聚类。
2)没有(或最小数目)聚类中心再发生变化。
3)误差平方和局部最小。
代码是白嫖的大佬的,
data=[]; N=3;%设置聚类数目 [m,n]=size(data); re=zeros(m,n+1); center=zeros(N,n);%初始化聚类中心 re(:,1:n)=data(:,:); for x=1:N center(x,:)=data( randi(300,1),:);%第一次随机产生聚类中心 end while 1 distence=zeros(1,N); num=zeros(1,N); new_center=zeros(N,n); for x=1:m for y=1:N distence(y)=norm(data(x,:)-center(y,:));%计算到每个类的距离 end [~, temp]=min(distence);%求最小的距离 re(x,n+1)=temp; end k=0; for y=1:N for x=1:m if re(x,n+1)==y new_center(y,:)=new_center(y,:)+re(x,1:n); num(y)=num(y)+1; end end new_center(y,:)=new_center(y,:)/num(y); if norm(new_center(y,:)-center(y,:))<0.1 k=k+1; end end if k==N break; else center=new_center; end end [m, n]=size(re); %最后显示聚类后的数据 figure; hold on; for i=1:m if re(i,n)==1 plot(re(i,1),re(i,2),'r+'); plot(center(1,1),center(1,2),'ko'); elseif re(i,n)==2 plot(re(i,1),re(i,2),'b*'); plot(center(2,1),center(2,2),'ko'); elseif re(i,n)==3 plot(re(i,1),re(i,2),'go'); plot(center(3,1),center(3,2),'ko'); else plot(re(i,1),re(i,2),'m*'); plot(center(4,1),center(4,2),'ko'); end end grid on
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。