k均值算法原理及matlab实现
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实现相关推荐
- k均值算法原理详细讲解以及matlab代码实现
有研究生物电信号处理和机器学习的欢迎加我qq429500506共同交流学习进步. 最近更新文章的频率太低了,主要原因是不想为了发文章而发文章,想潜心研究,写好文章,顺便想说一句开源万岁,最近一个月虽然 ...
- 算法-聚类-K均值与模糊K均值:原理+python代码
这篇文章是根据作业修改后得到的,个人感觉写的比较详细了.但还有许多不足,希望大家评论指出. K均值聚类与模糊K均值 1. 算法原理及流程 相关名词解释如表1. 表1-相关名词解释 1.1 K均值算法原 ...
- 我的K均值算法的matlab实现
这是我的第一篇博客: K-Means算法过程,略: 这是一次课程的任务2333,是利用所学K-means聚类分析方法,对iris数据集进行聚类分析,并利用已知的样本类别标 签进行聚类分析评价: 我的K ...
- AP近邻传播聚类算法原理及Matlab实现
AP近邻传播聚类算法原理及Matlab实现 Affinity Propagation (AP)聚类是2007年在Science杂志上提出的一种新的聚类算法.它根据N个数据点之间的相似度进行聚类, ...
- matlab 投票法_SVM算法原理及其Matlab应用
<SVM算法原理及其Matlab应用>由会员分享,可在线阅读,更多相关<SVM算法原理及其Matlab应用(18页珍藏版)>请在人人文库网上搜索. 1.SVM 算法及其 Mat ...
- k均值算法 二分k均值算法_如何获得K均值算法面试问题
k均值算法 二分k均值算法 数据科学访谈 (Data Science Interviews) KMeans is one of the most common and important cluste ...
- python实现k均值算法_python实现kMeans算法
聚类是一种无监督的学习,将相似的对象放到同一簇中,有点像是全自动分类,簇内的对象越相似,簇间的对象差别越大,则聚类效果越好. 1.k均值聚类算法 k均值聚类将数据分为k个簇,每个簇通过其质心,即簇中所 ...
- 智能优化算法:海鸥算法原理及Matlab代码
智能优化算法:海鸥算法原理及Matlab代码 文章导航 1. 算法原理 2. SOA算法流程 2.1 迁徙行为(exploration ability) 2.2 攻击行为(exploitation a ...
- LBG算法、Lloyd算法和K均值算法
---------------------------------LBG算法.Lloyd算法和K-Means算法--------------------------------- LBG算法是一种矢量 ...
- K-Means(K均值聚类)原理及代码实现
机器学习 没有免费午餐定理和三大机器学习任务 如何对模型进行评估 K-Means(K均值聚类)原理及代码实现 KNN(K最近邻算法)原理及代码实现 KMeans和KNN的联合演习 文章目录 机器学习 ...
最新文章
- python的源代码文件的扩展名是-python源文件后缀是什么
- C++字符串详解(三) 字符串的查找
- 就业指导——招聘信息的获取、简历投递和指导、HR面试指导
- python六角形的绘制
- C#学习笔记-Windows窗体自定义初始位置
- ioc spring 上机案例_Spring的IoC入门案例
- matlab randomsample,randperm和randsample函数用法对比
- 【oracle】如何恢复误删的表记录数据
- ZooKeeper学习总结(1)——ZooKeeper入门介绍
- js table 生成序号_CSS Counter 以及 CSS content 内容生成技术的实用价值
- 为何大数据分析那么重要
- MySQL 【Row】下的 Event_type
- C++ 修改 Windows Service【转】
- RabbitMQ实战:理解消息通信
- 【Flutter之旅】路由管理
- Android系统下载管理DownloadManager功能介绍及使用示例
- 目标检测论文核心思想,18-19-20年论文梗概
- 骨头镇 BoneTown 破解+菜单汉化补丁
- 揭秘Angular 2
- GitHub Copilot 被爆存在安全漏洞,涉及四成代码