Matlab实现Kmeans算法(每行代码标注详细注解)
本文主要为了完成平日作业,并进一步加深对算法的理解。也希望对来访的读者有所帮助。
目录
一、什么是Kmeans算法
二、Kmeans算法的意义
三、Kmeans算法代码解析
1.关键概念
2.大致思路
3.对照每行代码的详细注解
四、总结
总结
一、什么是Kmeans算法
k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
二、Kmeans算法的意义
K-means算法通常可以应用于维数、数值都很小且连续的数据集,比如:从随机分布的事物集合中将相同事物进行分组。它的应用有许多,比如文档分类器、乘车数据分析、IT警报的自动化聚类等许多方面。
三、Kmeans算法代码解析
1.关键概念
欧式距离公式:(计算其他点到不同中心点的距离,判断属于哪个簇类)
2.大致思路
(1)从N个数据文档(样本)随机选取K个数据文档作为质心(聚类中心)。
本文在聚类中心初始化实现过程中采取在样本空间范围内随机生成K个聚类中心。
(2)对每个数据文档测量其到每个质心的距离,并把它归到最近的质心的类。
(3)重新计算已经得到的各个类的质心。
(4)迭代(2)~(3步直至新的质心与原质心相等或小于指定阈值,算法结束。
本文采用所有样本所属的质心都不再变化时,算法收敛。
3.对照每行代码的详细注解
function [U, E_in] = KMeans(data, K)
[N, d] = size(data);
% init U
sampleIds = randsample(1:N, K, false); //从n个点中随机选择三个点作为中心点
U = data(sampleIds, :); //以这三个点为中心形成簇类
labels_u = zeros(N, 1); //初始换建立一个N行1列的零数组
stop = true;
while stop //把true复制给stop,需要一直循环for i = 1:N //从第1个点一直到第n个点x = data(i, :); //读取第1个数据放到X里面% check label label = 0; //初始化label为0,代表是第几个簇类dist = 0; //初始化dist距离为0for j = 1:K //计算到达三个中心点的距离,依次推断属于哪个簇类tmp_dist = sum((x-U(j, :)).^2); //计算欧式距离,因比较大小,不用开根号也行if label == 0 || tmp_dist < dist //如果是第一次计算lable=0或者此时的距离小于上一次计算出的距离label = j; //当前的点暂时属于第j个聚类dist = tmp_dist; //欧式距离更新为当前的更小值end end //循环结束if labels_u(i) ~= label //如果第个i点不等于labelstop = false; //继续循环endlabels_u(i) = label; //第个i点属于第label个簇类end if stop == true //退出循环break;end%update U //更新中心点new_U = zeros(K, d); //初始化中心点,并全部清零labels_count = zeros(K, 1); //统计不同簇类的个数for i = 1:N //遍历所有点label = labels_u(i); //提取出簇类标志new_U(label, :) = new_U(label, :) + data(i, :); //这行代码不太懂,所有标签及对应data数据之和labels_count(label) = labels_count(label) + 1; //属于相同簇类的加起来for i = 1:K%new_U(i, :) = new_U(i, :)/labels_count(i); //初始化的中心点除以每个聚类里面总的个数endU = new_U; //用新的U来代替
end
E_in = 0;
for i = 1:N //N个点需要重新遍历label = labels_u(i); //将label标签提取出来u = U(label, :); E_in = E_in + norm(data(i)-u); //每一个点跟中心的距离,所有的距离应该是欧式距离的和
end
E_in = E_in/N; //欧式距离的和除以N,每个点距离的举止,表示聚合的效果
end
四、总结
以上就是对于Kmeans算法每行代码详细注解的全部内容啦,希望对大家有所帮助,快快收藏,好好学习这个算法吧!我也很乐意与读者进行探讨!
Matlab实现Kmeans算法(每行代码标注详细注解)相关推荐
- Matlab实现DBSCAN算法(每行代码标注详细注解)
本文主要为了完成平日作业,并进一步加深对算法的理解.也希望对来访的读者有所帮助. 目录 一.什么是DBSCAN算法 二.DBSCAN算法的意义 三.DBSCAN算法代码解析 1.关键概念 2.大致思路 ...
- 在Matlab实现Kmeans算法(每行代码带注释)
目录 一.前言 二.VQ概述 三.Kmeans算法 K-means 的算法步骤为: 四.Matlab代码实现过程 五. 一点点可选改动(个人看法) 参考链接: 一.前言 本人对机器学习.人工智能算法方 ...
- k-means算法的matlab实现,MATLAB实现K-means算法
MATLAB实现K-means算法 MATLAB实现K-means算法 关于K-means算法的原理:Kmeans聚类算法 main.m clc; clear; % 第一类数据 % 均值 mu1 = ...
- MATLAB实现k-means算法(k-均值)对无标签数据进行聚类,并通过肘部法则确定聚类类别
应一个小伙伴的要求介绍了一下K均值聚类算法.本人也不是很专业,这是之前自学的,如果有错,大家可以提出来,共同进步嘛. 文章目录 一.k-means算法(k-均值) 1.k-means算法介绍 2.k- ...
- 3d人脸识别算法opencv_10行代码实现人脸识别
什么是人脸识别 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术 ...
- matlab中k-means算法_机器学习 | KMeans聚类分析详解
大量数据中具有"相似"特征的数据点或样本划分为一个类别.聚类分析提供了样本集在非监督模式下的类别划分.聚类的基本思想是"物以类聚.人以群分",将大量数据集中相似 ...
- 【老生谈算法】matlab实现K-means算法源码——K-means算法
K-means算法matlab是实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]K-means算法matlab是实现.d ...
- K-means算法原理、代码实现,优缺点及改进
k-Means是一种无监督的聚类算法,实现起来比较简单,聚类效果也不错,因此被广泛应用. 原理 物以类聚,人以群分. 聚类是无监督学习(训练样本的标签信息未知,或者说难以拿到). 简单地说,就是把相似 ...
- 【MATLAB深度学习】10行代码实现图像分类
来自MATLAB官方文档: https://ww2.mathworks.cn/help/deeplearning/gs/try-deep-learning-in-10-lines-of-matlab- ...
最新文章
- uestc 1012 饭卡
- 博士生在没有导师指导的情况下,该如何自己选题发 CVPR ?
- Nature子刊:利用转细菌基因植物修复土壤有毒污染物!
- 嵌入式新人发展的总体方向
- .NET Core 2.0体验
- rs485接口上下拉_RS485接口EMC电路设计方案
- 固态硬盘 linux 文件系统,SSD是否需要使用特别的文件系统?
- Nginx 介绍与Linux下安装配置
- 浅谈代码审计入门实战:某博客系统最新版审计之旅
- ajax send()的作用_AJAX(Asynchronous JavaScript And XML)
- matlab语言编程pdf下载地址,Matlab语言编程 pdf epub mobi txt 下载
- KindEditor上传图片和修改图片
- python实现艾宾浩斯背单词功能,实现自动提取单词、邮件发送,部署在阿里云服务器,再也不用担心背单词啦!!
- 北航计算机691,2021考研:北京航空航天大学物理学专业691普通物理综合考试
- 创业成功,拉里•佩奇的五句箴言
- 基于CUDA的N-Body问题并行程序设计及性能优化
- [Android] 代码获取手机系统类型(小米MIUI、华为EMUI、魅族FLYME)
- selenium切换窗口句柄
- iOS热更新解读(三)—— JSPatch 之于 Swift
- android纪念日源码,分享超炫的表白页面和爱的纪念日源码