MATLAB 实现K-means算法

本文参考头条文章K-means算法MATLAB实现原文地址

K-menas算法

概念:

K-MEANS算法是对含有n个数据的数据集,根据数据之间相似性程度分类为k类。k-means 算法接受输入量 k ;相似度的度量有不同的量来表示,常见的有欧氏距离,用户也可以自定义衡量相似度的量,比如遥感影像分类中根据每个像素rgb值来衡量相似性。

实现步骤:

1、随机选定k个对象作为聚类中心;

2、计算每个点到k个聚类中心的距离,点局那个聚类中心的距离最小,就把点划分到哪个类别中。

3、计算新的聚类中心。

4、当满足一定条件(两次聚类中心的变化和小或者循环达到一定的次数)时,则停止计算,否则进行步骤2;

MATLAB代码实现:

K-means.m

function [Idx, Center]=K_means(x,k)
% Idx是数据属于哪个类的标记,Center是每个类的中心位置
% X是全部二维数据点,k是分为k类
figure;
plot(x(:,1),x(:,2),'bo');hold on;
plot(x(1:k,1),x(1:k,2),'r*');hold off;
grid on;
title('raw data and original center');
len=length(x);
Idx=zeros(len,1);
c=x(1:k,:);

for i=1:10000
    for j=1:len
        xtemp=x(j,:);
        for jj=1:k
             d(jj)=norm(xtemp-c(jj,:));
        end
        [~,id]=min(d);
        Idx(j)=id;
    end
   
    for j=1:k
       L=x(Idx==j,:);
       c(j,:)=mean(L);
     end
end
Center=c;

主函数.m

close all;
a=rand(30,2)*20;
 b=rand(30,2)*5;
 c=rand(30,2)*10;
 figure;
 plot(a(:,1),a(:,2),'bo');hold on;
 plot(b(:,1),b(:,2),'ro');
 plot(c(:,1),c(:,2),'ko');hold off;
 grid on;
 title('raw data');
 
 x=[a;b;c];
 
[Idx,Center]=K_means(x,3);
 figure;
 
 plot(x(Idx==1,1),x(Idx==1,2),'ko');hold on;
 plot(x(Idx==2,1),x(Idx==2,2),'go');
 plot(x(Idx==3,1),x(Idx==3,2),'bo');
 plot(Center(:,1),Center(:,2),'r*'); hold off;
 grid on;
 title('k-means cluster result');
 结果图如下:

原始数据点

 

最初的聚类中心

聚类中心示意

聚类结果图:

聚类结果图

 

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值