k均值算法

简单的说,k均值算法是将一些坐标点,按距离划分,聚为k类(k为先设置的值)。例:对以下点的坐标进行聚类
坐标点的数量很多,可以通过k均值算法进行聚类。k均值算法的思路是,先初始化k个类心,将所有坐标点归在这些类里,一次次寻找新的类心使聚类效果更佳,直至用k均值算法无法找到更优化的解。
k均值算法的代码及分析
第一步:初始随机选择k个点作为类心。
分析:先随机找一个解,作为初始可行解。故初始解会影响聚类的速度和最终聚类结果(陷入局部最优解)。可以通过多次随机选取初始解找到较优的结果。
第二步:将所有点,按距离分到最近的类心里,得到k个类。
分析: 样本点归在最近的类心比其他归类方式更优。
第三步:类内寻找新类心
方法:新类心的横纵坐标为原来类内所有点横纵坐标的平均值。
分析:对于一片数据点来说,数据点的中心(坐标的平均值),离这些点的总距离最短。
类内距离:
其中xi,yi为类内点的横纵坐标,x*,y*为类心的横纵坐标。当类心坐标为类内点坐标的平均值时,类内距离最小。(证明类似最小二乘法)。
故第三步使聚类效果更优化。

第四步:若类心有变化则返回第二步,若类心没有改变,则聚类结束。
分析:通过第二步、第三步不断优化聚类效果,找到更优化的解,直到类心无变化,说明无法找到更优化的解。
matlab代码

k = 5; %先设定聚类数量
[d,fff] = size(point);%d为样本点的个数
%第一步:初始随机选择k个点作为类心。
leixin = zeros(k,2);
suiji = randperm(d);
for i = 1:1:kleixin(i,1) = point(suiji(1,i),1);leixin(i,2) = point(suiji(1,i),2);
end
%第一步分析:先随机找一个解,作为初始可行解。故初始解会影响聚类的速度和最终聚类结果(陷入局部最优解)。可以通过多次随机选取初始解找到较优的结果。ddcs = 50; %设置迭代次数,若迭代超过一定次数则停止
zjl = zeros(1,ddcs); %总距离,所有类心到类内各点距离之和。for q = 1:1:ddcs%第二步,将所有点,按距离分到最近的类心里,得到k个类。   %计算每个点到类心的距离distences = zeros(k,d);for i = 1:1:kfor j = 1:1:ddistences(i,j) = ((leixin(i,1) - point(j,1)).^2  + (leixin(i,2) - point(j,2)).^2).^(1/2); endend%将到类心最短距离的点归类guilei = zeros(1,d);for i = 1:1:dguilei(1,i) = min(find(distences(:,i) == min(distences(:,i))));end%第二步分析:样本点归在离的最近的类心。%第三步:类内寻找新类心%新类心的横纵坐标为原来类内所有点横纵坐标的平均值  for i = 1:1:ka = find(guilei(1,:) == i);leixin(i,1) = sum(point(a,1))/length(a);leixin(i,2) = sum(point(a,2))/length(a);end%第三步分析,对于一片数据点来说,数据点的中心(坐标的平均值),离这些点的总距离最短。%第四步:若类心没有改变,则聚类结束%计算类心离类内点的总距离zjl(1,q) = sum(leineijuli);if q > 1if zjl(1,q) == zjl(1,q - 1)breakendend%第四步分析:若类心改变,则总距离变化,以总距离的变化来判断类心是否有变化。
end

部分样本点point:

第一列为横坐标,第二列为纵坐标。

聚类结果:

k均值算法原理及matlab实现相关推荐

  1. k均值算法原理详细讲解以及matlab代码实现

    有研究生物电信号处理和机器学习的欢迎加我qq429500506共同交流学习进步. 最近更新文章的频率太低了,主要原因是不想为了发文章而发文章,想潜心研究,写好文章,顺便想说一句开源万岁,最近一个月虽然 ...

  2. 算法-聚类-K均值与模糊K均值:原理+python代码

    这篇文章是根据作业修改后得到的,个人感觉写的比较详细了.但还有许多不足,希望大家评论指出. K均值聚类与模糊K均值 1. 算法原理及流程 相关名词解释如表1. 表1-相关名词解释 1.1 K均值算法原 ...

  3. 我的K均值算法的matlab实现

    这是我的第一篇博客: K-Means算法过程,略: 这是一次课程的任务2333,是利用所学K-means聚类分析方法,对iris数据集进行聚类分析,并利用已知的样本类别标 签进行聚类分析评价: 我的K ...

  4. AP近邻传播聚类算法原理及Matlab实现

    AP近邻传播聚类算法原理及Matlab实现    Affinity Propagation (AP)聚类是2007年在Science杂志上提出的一种新的聚类算法.它根据N个数据点之间的相似度进行聚类, ...

  5. matlab 投票法_SVM算法原理及其Matlab应用

    <SVM算法原理及其Matlab应用>由会员分享,可在线阅读,更多相关<SVM算法原理及其Matlab应用(18页珍藏版)>请在人人文库网上搜索. 1.SVM 算法及其 Mat ...

  6. k均值算法 二分k均值算法_如何获得K均值算法面试问题

    k均值算法 二分k均值算法 数据科学访谈 (Data Science Interviews) KMeans is one of the most common and important cluste ...

  7. python实现k均值算法_python实现kMeans算法

    聚类是一种无监督的学习,将相似的对象放到同一簇中,有点像是全自动分类,簇内的对象越相似,簇间的对象差别越大,则聚类效果越好. 1.k均值聚类算法 k均值聚类将数据分为k个簇,每个簇通过其质心,即簇中所 ...

  8. 智能优化算法:海鸥算法原理及Matlab代码

    智能优化算法:海鸥算法原理及Matlab代码 文章导航 1. 算法原理 2. SOA算法流程 2.1 迁徙行为(exploration ability) 2.2 攻击行为(exploitation a ...

  9. LBG算法、Lloyd算法和K均值算法

    ---------------------------------LBG算法.Lloyd算法和K-Means算法--------------------------------- LBG算法是一种矢量 ...

  10. K-Means(K均值聚类)原理及代码实现

    机器学习 没有免费午餐定理和三大机器学习任务 如何对模型进行评估 K-Means(K均值聚类)原理及代码实现 KNN(K最近邻算法)原理及代码实现 KMeans和KNN的联合演习 文章目录 机器学习 ...

最新文章

  1. python的源代码文件的扩展名是-python源文件后缀是什么
  2. C++字符串详解(三) 字符串的查找
  3. 就业指导——招聘信息的获取、简历投递和指导、HR面试指导
  4. python六角形的绘制
  5. C#学习笔记-Windows窗体自定义初始位置
  6. ioc spring 上机案例_Spring的IoC入门案例
  7. matlab randomsample,randperm和randsample函数用法对比
  8. 【oracle】如何恢复误删的表记录数据
  9. ZooKeeper学习总结(1)——ZooKeeper入门介绍
  10. js table 生成序号_CSS Counter 以及 CSS content 内容生成技术的实用价值
  11. 为何大数据分析那么重要
  12. MySQL 【Row】下的 Event_type
  13. C++ 修改 Windows Service【转】
  14. RabbitMQ实战:理解消息通信
  15. 【Flutter之旅】路由管理
  16. Android系统下载管理DownloadManager功能介绍及使用示例
  17. 目标检测论文核心思想,18-19-20年论文梗概
  18. 骨头镇 BoneTown 破解+菜单汉化补丁
  19. 揭秘Angular 2
  20. GitHub Copilot 被爆存在安全漏洞,涉及四成代码

热门文章

  1. wps PPT 中提取视频
  2. cv个人计算机SCI英文简历模板,个人英语简历模板|英文简历模板pdf百度云
  3. Java基础篇——垃圾回收
  4. java 回收器有几种_Java垃圾回收器种类
  5. matlab闰年问题,MATLAB中文上机作业.pdf
  6. COMSOL仿真软件入门学习(一)
  7. 韩立刚《计算机网络》| 第6章 应用层
  8. vue 调用移动录像_vue H5项目调用手机摄像头录像并上传
  9. KVM环境下vCPU绑定到物理CPU
  10. 用于热水器行业气密性检测的五款快速密封接头