• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

MATLAB 实现K-means算法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文参考头条文章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人参与评论

请发表评论

全部评论

专题导读
上一篇:
Rust程序设计语言(5)发布时间:2022-07-18
下一篇:
使用Rust开发推箱子游戏第一章发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap