【MATLAB】MATLAB实现二维K-mean聚类算法


一、功能

实现K-均值聚类


二、流程图

在这里插入图片描述


三、程序

% K-均值聚类
point = rand(100,2);  % 输入点的坐标
k = 3;  % 输入聚类组数

count = 100;  % 定义最大循环次数
[N,~] = size(point);
center = point(1:k,:);  % 令前k个点为初始的聚类中心

distance_square = zeros(N,k);
while count~=0
    for i = 1:k
        distance_square(:,i) = sum((point - repmat(center(i,:),N,1)).^2,2);
        str = ['Center',num2str(i),'=[];'];
        eval(str);
    end  % 计算到每个点到各个聚类中心的距离
    
    for i = 1:N
        minposition = find(distance_square(i,:)==min(distance_square(i,:)));
        str = ['Center',num2str(minposition)];
        eval([str,'=[',str,';point(i,:)];']);
    end  % 建立第一次分类后的分类点集
    
    for i = 1:k
        str = ['Center',num2str(i)];
        eval(['center_New(',num2str(i),',:) = mean(',str,',1);']);
    end  % 计算新的聚类中心
    
    if sym(sum((center_New - center).^2)) == 0
        break
    else
        center = center_New;
    end  % 如果中心未改变则跳出循环
    
    count = count-1;
end

for i = 1:k
    I = num2str(i);
    disp(['第',I,'组聚类的点集为:']);
    disp(eval(['Center',I]));
end  % 把聚类点显示出来

hold on
for i = 1:k
    str = ['Center',num2str(i)];
    plot(eval([str,'(:,1)']),eval([str,'(:,2)']),'.','Markersize',15,'color',[rand rand rand]);
    eval(['kn = boundary(',str,'(:,1),',str,'(:,2),0.1);'])
    if isempty(kn)
        eval(['plot(',str,'(:,1),',str,'(:,2));']);
    else
        eval(['plot(',str,'(kn,1),',str,'(kn,2));']);
    end
    plot(center(:,1),center(:,2),'k+');
end  % 绘图

四、程序运行结果

在这里插入图片描述


五、文件下载地址

MATLAB程序文件下载地址:【MATLAB】MATLAB实现K-mean聚类算法


欢迎交流!
在这里插入图片描述

  • 12
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CharlesWYQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值