没有时间详细写了,直接贴代码吧。

%%%%%函数

function [index]=zzhKmean(x,num)
nData=size(x,1);
index=zeros(1,nData);
center=zeros(num,2);
for n=1:nData
    index(n)=ceil(num*rand(1));
end
jud=1;
while jud==1
    jud=0;
    for n=1:num
        center(n,1)=mean(x(find(index==n),1));
        center(n,2)=mean(x(find(index==n),2));
    end
    for n=1:nData
        ind=index(n);
        dist=zeros(1,num);
        Xn=x(n,:);
        for m=1:num
            dist(m)=norm(Xn-center(m,:));
        end
        indShould=find(dist==min(dist));
        if indShould~=ind
            jud=1;
            index(n)=indShould;
        end
    end

end

%%%%%%%%%%%


%%%%%%%主程序,令k=3

x=rand(50,2);
index=zzhKmean(x,3);
x1=x(find(index==1),:);
x2=x(find(index==2),:);
x3=x(find(index==3),:);
plot(x1(:,1),x1(:,2),'r+');
hold on;
plot(x2(:,1),x2(:,2),'b+');
hold on;

plot(x3(:,1),x3(:,2),'g+');

%%%%%%%%%%

结果如图

k均值算法的MATLAB实现

相关文章: