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

2023-11-18

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

(该算法的优化Kmean++算法的代码详解已在其他文章给出:

Matlab实现Kmeans++算法(每行代码标注详细注解)_高垚淼的博客-CSDN博客

Matlab实现Bi-Kmeans算法(每行代码标注详细注解)_高垚淼的博客-CSDN博客

目录

一、什么是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距离为0
        for 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点不等于label
            stop = false;                          //继续循环
        end
        labels_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);        //初始化的中心点除以每个聚类里面总的个数
    end
    U = 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算法每行代码详细注解的全部内容啦,希望对大家有所帮助,快快收藏,好好学习这个算法吧!我也很乐意与读者进行探讨!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab实现Kmeans算法(每行代码标注详细注解) 的相关文章

  • AI帮助终结全球饥饿问题

    全球饥饿问题是牵动人心的头等大事 5月28日是 世界饥饿日 这一问题更值得关注 让人人都能吃饱的想法不仅令人向往 而且很快就会变成现实 与大多数新事物引进一样 对于在控制世界粮食供应这样复杂的任务中AI究竟应该发挥多大的作用 人们还踟蹰不前
  • AI-基于Langchain-Chatchat和chatglm3-6b部署私有本地知识库

    目录 参考 概述 部署安装 环境准备 原理和流程图 一键启动 启动WebAPI 服务 启动WebUI服务 Docker部署
  • 「优选算法刷题」:移动零

    嗨 这个假期罗根开始接触了算法 在为今年的蓝桥杯做准备 所以 开个新专栏 记录记录自己做算法题时的心得 一 题目 给定一个数组 nums 编写一个函数将所有 0 移动到数组的末尾 同时保持非零元素的相对顺序 请注意 必须在不复制数组的情况下
  • 『力扣刷题本』:逆波兰表达式求值

    大家好久不昂 最近 1 个多月罗根一直在备考期末 文章发的很少 现在已经放寒假啦 学习自然也不能拉下 毕竟 4 月份就要去参加蓝桥杯了 先给自己定个小目标 日更 2 篇 咳咳 下面马上开始讲题 一 题目 给你一个字符串数组 tokens 表
  • 使用企业订货软件的担忧与考虑|网上APP订货系统

    使用企业订货软件的担忧与考虑 网上APP订货系统 网上订货系统担心出现的问题 1 如果在订货系统中定错 多 货物了该怎么办 其实这也是很多人在网购或者是现实中经常会犯的一个错误 但是网上订货平台为大家提供了很多的解决方案 其中对于订单的修改
  • 考虑光伏出力利用率的电动汽车充电站能量调度策略研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 用栈实现队列(OJ中报错的处理)

    用栈实现队列 ERROR AddressSanitizer myQueueFree函数中栈的释放处现了问题 没有调用StackDestory而是直接free了 这个是栈初始化时 capacity与malloc申请的空间大小没有匹配 请你仅使
  • 2024年华为OD机试真题-虚拟游戏理财-Python-OD统一考试(C卷)

    题目描述 在一款虚拟游戏中生活 你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局 现有一家Bank 它提供有若干理财产品m 风险及投资回报不同 你有N 元 进行投资 能接受的总风险值为X 你要在可接受范围内选择最优的投资方式获得最大回报
  • 考虑光伏出力利用率的电动汽车充电站能量调度策略研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 【产品兼容认证】WhaleStudio 成功兼容TiDB数据库软件

    平凯星辰和白鲸开源宣布成功完成产品兼容认证 北京 2023年12月27日 平凯星辰 北京 科技有限公司 以下简称平凯星辰 旗下的 TiDB 产品与白鲸开源的 WhaleStudio 已成功完成产品兼容性认证 这一重要合作旨在为全球客户提供更
  • 国产化率100%,北斗导航单日定位4500亿次,外媒:GPS将被淘汰

    追赶30年的技术差距 国产卫星导航系统 北斗 开始扬眉吐气 数据显示 北斗导航目前单日定位量达4500亿次 已经获得100多个国家的合作意向 甚至国际民航也摒弃以往 独宠 GPS的惯例 将北斗纳入参考标准 对此 有媒体直言 GPS多年来的技
  • 高精度运算合集,加减乘除,快速幂,详细代码,OJ链接

    文章目录 零 前言 一 加法 高精度加法步骤 P1601 A B 二 减法 高精度减法步骤
  • k-means 的时间复杂度是多少?

    我正在经历k means 维基百科页面 http en wikipedia org wiki K means clustering 根据算法 我认为复杂度是O n k i n 总元素 k 簇迭代次数 那么有人可以向我解释一下维基百科上的这个
  • SKLearn KMeans 收敛警告[重复]

    这个问题在这里已经有答案了 我在一维数据集上使用 SKLearn 的 KMeans 聚类 我遇到的错误是 当我运行代码时 我得到一个ConvergenceWarning ConvergenceWarning Number of distin
  • 剪影分数怎么可能是负数?

    如果我们有一些数据点 例如 我们使用 k means 进行分段 所得到的线段是否不是每个点都最接近其各自簇的质心 如果是这样 当 Silhouette Score 比较 ai 到簇内点的平均距离 和 bi 到簇外点的平均距离 时 怎么会出现
  • 使用谱聚类对看不见的点进行聚类

    我在用谱聚类 http papers nips cc paper 2092 on spectral clustering analysis and an algorithm方法对我的数据进行聚类 实施似乎工作正常 但是 我有一个问题 我有一
  • Sklearn.KMeans:如何避免内存或值错误?

    我正在研究图像分类问题 并且正在创建一个词袋模型 为此 我提取了所有图像的 SIFT 描述符 并且必须使用 KMeans 算法来找到用作我的词袋的中心 这是我拥有的数据 图片数量 1584 SIFT 描述符的数量 32 个元素的向量 571
  • mutate/tibble 中的自定义函数

    我正在关注一个tutorial https cran r project org web packages broom vignettes kmeans html我正在尝试将这部分应用于我的数据 问题 kclusts lt tibble k
  • 从彩色背景中提取黑色对象

    人眼很容易辨别black来自其他颜色 但是计算机呢 我在普通的A4纸上打印了一些色块 由于组成彩色图像有青色 品红色和黄色三种墨水 所以我设置每个块的颜色C 20 C 30 C 40 C 50 以及其余两种颜色是 0 这是我的源图像的第一列
  • 在 mahout-0.6 上运行“Mahout in Action”中的示例代码时出现 IOException

    我正在学习 Mahout 并阅读 Mahout in Action 当我尝试运行第 7 章 Simple KMeans Clustering java 中的示例代码时 弹出了一个异常 线程 main 中的异常 java io IOExcep

随机推荐

  • 巴比特

    摘要 据 科创板日报 报道 当地时间5月9日 Meta宣布开源了一种可以横跨6种不同模态的全新AI模型ImageBind 包括视觉 图像和视频形式 温度 红外图像 文本 音频 深度信息 运动读数 由惯性测量单元或IMU产生 ImageBin
  • 为什么需要进程间通信??

    进程是一个独立的资源分配单元 不同进程 这里所说的进程通常指的是用户进程 之间的资源是独立的 没有关联 不能在一个进程中直接访问另一个进程的资源 例如打开的文件描述符 但是 进程不是孤立的 不同的进程需要进行信息的交互和状态的传递等 因此需
  • 微信公众号支付H5调用支付详解

    原文地址 http blog csdn net fengshizty article details 45564685 微信公众号支付 最近项目需要微信支付 然后看了下微信公众号支付 虽然不难 但是细节还是需要注意的 用了大半天时间写了个d
  • [Java]JAVA获取实体与List 数组的转换

    public class BeanToArray private String beanNames private Object values public BeanToArray public BeanToArray String bea
  • vs添加第三方库详解

    vs添加第三方库详解 一 编写库所生成的文件 核心文件 二 两种使用库的方式 此时添加一个Pro工程调用这个库 三 库导出函数时候的细节情况 四 新建工程使用这个库 以前总是不知道怎么使用第三方库 每次想学习一个库进行开发 总是遇到各种各样
  • Java中关于System.out.println/print的运算规则

    一 输出到控制台 System out println msg 输出一个字符串 带换行 n System out print msg 输出一个字符串 不带换行 n System out printf format msg 格式化输出 注 p
  • SpringMVC的请求(参数绑定注解、Restful风格的参数的获取、自定义类型转换器、获得Servlet相关API)

    SpringMVC的请求 获得请求参数 SpringMVC的请求 获得请求参数 SpringMVC的请求 获得请求参数 1 SpringMVC的请求 获得请求参数 配置全局乱码过滤器 2 SpringMVC的请求 获得请求参数 参数绑定注解
  • Serializable简单介绍

    Serializable 序列化 什么是序列化 序列化是将对象状态转化为可保持或者传输的格式过程 与序列化相反的是反序列化 完成序列化和反序列化 可以存储或传输数据 一般情况下 在定义实体类时会使用Serializable 为什么要序列化对
  • 硬件学习——I2C

    I2C简单来讲就是2线的串行总线 由SDA Serial Data Line 和SCL Serial Clock Line 构成 它遵循主从结构 允许多主多从 主设备 发起 停止数据输出 并且通过控制时钟来控制数据传输过程 从设备 响应主设
  • 若依vue分离版使用字典

    首先来看官方文档 接下来我们进行操作 第一步已经添加完 来做第二步 打开index vue 在index vue中 找到变量定义的位置 一般在data 中 定义一个新数组
  • LayUI中的基本元素之面板

    前言 最近在准备找工作的事项 但是作为一个后台也是需要了解一些前端框架的 就目前的来说有大火的VUE 但是VUE还是存在一定的学习成本 所以决定先从对后台友好的LayUI开始入手先做一些小项目练练手 后面会考虑使用VUE ElementUI
  • React.Component

    React Component 本章节提供了 React class 组件的详细 API 参考 本章节默认你已熟悉基本的 React 概念 例如 组件 Props 以及 State 生命周期等 概览 React 的组件可以定义为 class
  • teacher-student network

    最近读到一篇文章 An On device Deep Neural Network for Face Detection 讲的是苹果如何将基于深度学习的人脸识别方法应用到iPhone上 同时解决多任务并行及能耗的问题 文中提到了一个teac
  • python第三方库概述_计算机二级python:python第三方库概述

    1 本节课我们进行讲解python第三方库概述 先看一下考纲考点如图所示 2 然后我们来看一下知识导图如图所示 3 查看一下pip工具安装然后进行根据要求步骤安装 4 然后我们来看一下pyinstaller库概述如图所示 5 接下来我们再来
  • android 图像识别sdk,在android系统下实现图像识别

    首先我们了解下 Android系统常用的图像识别框架 一 调用一些不开源库进行识别 旷视的图像识别及 OCR 文字识别库 及其他厂家如阿里 百度 华为 腾讯的 OCR 文字识别库等 二 调用一些开源库进行识别 一 tensorflow 训练
  • python写出梯度下降的代码

    以下是一个使用Python实现的基本梯度下降 Gradient Descent 算法的示例 导入必要的库 import numpy as np import matplotlib pyplot as plt 定义损失函数 def compu
  • seq2seq模型

    转载自 http blog csdn net sunlylorn article details 50607376
  • k--最近邻算法(KNN)

    目录 一 简介 二 举例理解 三 算法步骤 四 其他说明 1 关于距离的计算 2 超参数 3 关于K值的选择 4 取K值的方法 5 关于决策依据 6 优缺点 五 代码 一 简介 邻近算法 KNN 是数据挖掘分类技术最简单的方法之一 所谓K最
  • Asp.net_Study学习笔记

    Asp net Study web基本原理 浏览器向服务器发送请求 服务器响应 报错 HTTP Error 403 14 Forbidden Web 服务器被配置为不列出此目录的内容 解决 打开控制面板里的程序 点击启用或关闭Windows
  • Matlab实现Kmeans算法(每行代码标注详细注解)

    本文主要为了完成平日作业 并进一步加深对算法的理解 也希望对来访的读者有所帮助 该算法的优化Kmean 算法的代码详解已在其他文章给出 Matlab实现Kmeans 算法 每行代码标注详细注解 高垚淼的博客 CSDN博客 Matlab实现B