本文主要为了完成平日作业,并进一步加深对算法的理解。也希望对来访的读者有所帮助。

目录

一、什么是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算法(每行代码标注详细注解)相关推荐

  1. Matlab实现DBSCAN算法(每行代码标注详细注解)

    本文主要为了完成平日作业,并进一步加深对算法的理解.也希望对来访的读者有所帮助. 目录 一.什么是DBSCAN算法 二.DBSCAN算法的意义 三.DBSCAN算法代码解析 1.关键概念 2.大致思路 ...

  2. 在Matlab实现Kmeans算法(每行代码带注释)

    目录 一.前言 二.VQ概述 三.Kmeans算法 K-means 的算法步骤为: 四.Matlab代码实现过程 五. 一点点可选改动(个人看法) 参考链接: 一.前言 本人对机器学习.人工智能算法方 ...

  3. k-means算法的matlab实现,MATLAB实现K-means算法

    MATLAB实现K-means算法 MATLAB实现K-means算法 关于K-means算法的原理:Kmeans聚类算法 main.m clc; clear; % 第一类数据 % 均值 mu1 = ...

  4. MATLAB实现k-means算法(k-均值)对无标签数据进行聚类,并通过肘部法则确定聚类类别

    应一个小伙伴的要求介绍了一下K均值聚类算法.本人也不是很专业,这是之前自学的,如果有错,大家可以提出来,共同进步嘛. 文章目录 一.k-means算法(k-均值) 1.k-means算法介绍 2.k- ...

  5. 3d人脸识别算法opencv_10行代码实现人脸识别

    什么是人脸识别 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术 ...

  6. matlab中k-means算法_机器学习 | KMeans聚类分析详解

    大量数据中具有"相似"特征的数据点或样本划分为一个类别.聚类分析提供了样本集在非监督模式下的类别划分.聚类的基本思想是"物以类聚.人以群分",将大量数据集中相似 ...

  7. 【老生谈算法】matlab实现K-means算法源码——K-means算法

    K-means算法matlab是实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]K-means算法matlab是实现.d ...

  8. K-means算法原理、代码实现,优缺点及改进

    k-Means是一种无监督的聚类算法,实现起来比较简单,聚类效果也不错,因此被广泛应用. 原理 物以类聚,人以群分. 聚类是无监督学习(训练样本的标签信息未知,或者说难以拿到). 简单地说,就是把相似 ...

  9. 【MATLAB深度学习】10行代码实现图像分类

    来自MATLAB官方文档: https://ww2.mathworks.cn/help/deeplearning/gs/try-deep-learning-in-10-lines-of-matlab- ...

最新文章

  1. uestc 1012 饭卡
  2. 博士生在没有导师指导的情况下,该如何自己选题发 CVPR ?
  3. Nature子刊:利用转细菌基因植物修复土壤有毒污染物!
  4. 嵌入式新人发展的总体方向
  5. .NET Core 2.0体验
  6. rs485接口上下拉_RS485接口EMC电路设计方案
  7. 固态硬盘 linux 文件系统,SSD是否需要使用特别的文件系统?
  8. Nginx 介绍与Linux下安装配置
  9. 浅谈代码审计入门实战:某博客系统最新版审计之旅
  10. ajax send()的作用_AJAX(Asynchronous JavaScript And XML)
  11. matlab语言编程pdf下载地址,Matlab语言编程 pdf epub mobi txt 下载
  12. KindEditor上传图片和修改图片
  13. python实现艾宾浩斯背单词功能,实现自动提取单词、邮件发送,部署在阿里云服务器,再也不用担心背单词啦!!
  14. 北航计算机691,2021考研:北京航空航天大学物理学专业691普通物理综合考试
  15. 创业成功,拉里•佩奇的五句箴言
  16. 基于CUDA的N-Body问题并行程序设计及性能优化
  17. [Android] 代码获取手机系统类型(小米MIUI、华为EMUI、魅族FLYME)
  18. selenium切换窗口句柄
  19. iOS热更新解读(三)—— JSPatch 之于 Swift
  20. android纪念日源码,分享超炫的表白页面和爱的纪念日源码

热门文章

  1. 前后端分离的前生今世
  2. 原来面试成功的程序员简历都是这样写的
  3. date.now()
  4. 旅游网站的设计与实现
  5. 演讲实录丨戴琼海院士《人工智能:算法·算力·交互》
  6. 华为、苹果、三星扎堆发财报,谁的日子最不好过?
  7. 马云为何放得下辛苦创立的“阿里帝国”?
  8. 多线程总结:1.线程的创建于开启 2.线程的状态 3.线程安全
  9. PHP针对数字的加密解密类,可直接使用
  10. 会长聚课堂 联手赢未来—湖北省商协会会长高级研修班开学典礼及课程邀请函