聚类:聚类的介绍及k-means算法

聚类:聚类的介绍及k-means算法

什么是聚类

聚类就是在输入为多个数据时,将“相似”的数据分为一组的操作。1 个组就叫作 1 个 “簇”。下面的示例中每个点都代表1 个数据,在平面上位置较为相近、被圈起来的点就代表一 类相似的数据。也就是说,这些数据被分为了 3 个簇。

在这里插入图片描述

假设某所高中的某个年级中共有 400 名学生,现在我们想要将这些学生在考试中取得的语 文、数学、英语成绩数据化,并将他们按照“擅长或不擅长的科目相似”进行聚类。

把每个学生都转换成“(语文成绩 , 数学成绩 , 英语成绩)”形式的数据后,就可以将两个数 据(c1, m1, e1)和(c2, m2, e2)之间的差距定义为 (c1-c2)² + (m1-m2)² + (e1-e2)² ,其中差距小的数据 就互为“相似的数据”。

即使定义好了数据间的差距,聚类的方法也会有很多种。我们可以设定各种各样的条件, 比如想把数据分为 10 个簇,或者想把 1 个簇内的数据定在 30~50 人之间,再或者想把簇内数据间的最大距离设为 10,等等。而设定什么样的条件取决于进行聚类的目的。

在这里插入图片描述

假如是为了开办暑期补习班而对学生进行分班,那么就要根据老师和教室的数量来确定 “簇的数量”,并根据教室的面积确定“每个簇内的数据量”。现在有很多种可以满足各类条件的聚类算法供我们选择。“k-means 算法”就是其中一种。

k-means算法

k-means 算法是聚类算法中的一种,它可以根据事先给定的簇的数量进行聚类。

首先准备好需要聚类的数据,然后决定簇的数量。本例中我们将簇的数量定为 3。此处用点表示数据,用两点间的直线距离表示数据间的差距。并且随机选择 3 个点作为簇的中心点。

在这里插入图片描述

计算各个数据分别和 3 个中心点中的哪一个点距离最近。

在这里插入图片描述

将数据分到相应的簇中。这样,3 个簇的聚类就完成了。

在这里插入图片描述

计算各个簇中数据的重心,然后将簇的中心点移动到这个位置。而随着中心点的移动,部分数据的“距离自己最近的中心点”也会改变。然后,重新计算距离最近的簇的中心点,并将数据分到相应的簇中。

在这里插入图片描述

重复执行“将数据分到相应的簇中”和“将中心点移到重心的位置”这两个操作,直到中心点不再发生变化为止。

在这里插入图片描述

4 轮操作结束后,结果如上图所示。即使继续重复操作,中心点也不会再发生变化,操作到此结束,聚类也就完成了。此时我们可以确定,相似的数据已经被恰当地分为一组了。


k-means 算法中,随着操作的不断重复,中心点的位置必定会在某处收敛,这一点已经在数学层面上得到证明。

算法中,随着操作的不断重复,中心点的位置必定会在某处收敛,这一点已经在数学层面上得到证明。

除了 k-means 算法以外,聚类算法还有很多,其中“层次聚类算法”较为有名。与 k-means 算法不同,层次聚类算法不需要事先设定簇的数量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何为开源项目和社区做贡献 -- 你应该知道的十件事(一)

1. 前言 大家好,我叫颜国进,现为英特尔边缘计算创新大使、百度飞桨开发者专家。回溯至2021年12月,那时的我,身为机械专业研一新生,仅在C和Python编程语言上有些许基础,对于深度学习的殿堂还只敢在门口窥探&…

【动态规划】【字符串】C++算法:正则表达式匹配

作者推荐 视频算法专题 涉及知识点 动态规划 字符串 LeetCode10:正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ’ 匹配零个或多个前面的那一个元素 所谓匹配,是…

web网站的工作流程和开发模式

web网站的工作流程和开发模式 基于Java Script封装的高级技术:Vue、Element、Nginx(前端程序部署的服务器) 初识Web前端 Web标准

java8 构建流的5种方法

1 由值创建流&#xff08;Stream.of&#xff09; Stream<String> stream Stream.of("Java 8 ", "Lambdas ", "In ", "Action");stream.map(String::toUpperCase).forEach(System.out::println);Stream<String> emptySt…

Linux常见的21条面试命令

Linux常见的21条面试命令 文章目录 简单文件查看权限文件搜索find() 文件内容&#xff08;查看查找处理&#xff09;catgrepsedpastesortcomm 系统进程内存输入输出 常见的shell 命令循环&#xff0c;判断&#xff0c;变量函数awkgrepsedsortuniqwctr 常见题目词频统计转置文件…

Conv2Former:一种transformer风格的卷积特征提取方式

一、前言 昨天读到了一篇有意思的文章&#xff0c;文章提出通过利用卷积调制操作来简化self-attention。还证明了这种简单的方法可以更好地利用卷积层中嵌套的大核(≥7 7)。我们都知道ViTs推动了设计识别模型的发展&#xff0c;近几年使用的也相当的多&#xff0c;通常就是CN…

《ORANGE’S:一个操作系统的实现》读书笔记(十九)输入输出系统(一)

我们刚刚实现了简单的进程&#xff0c;你现在可能很想把它做得更加完善&#xff0c;比如进一步改进调度算法、增加通信机制等。但是这些工作不但做起来没有尽头&#xff0c;而且有些也是难以实现的&#xff0c;因为进程必须与I/O、内存管理等其它模块一起工作。而且&#xff0c…

R语言【CoordinateCleaner】——cc_coun(): 删除或标记地理坐标与其他国家/地区信息之间的不匹配(通常此信息与样本一起可靠地报告)

Package CoordinateCleaner version 2.0-20 Parameters cc_coun(x,lon "decimallongitude",lat "decimallatitude",iso3 "countrycode",value "clean",ref NULL,ref_col "iso_a3",verbose TRUE ) 参数【x】&#x…

Linux系统---进程程序替换

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、进程程序替换 一、替换原理 用fork 创建子进程后执行的是和父进程相同的程序 ( 但有可能执行不同的代码分支 ), 子进程往往要…

浅析 Dockerfile 构建缓存:原理与优化方法

Docker镜像的分层结构 Docker的镜像是由一层一层的文件系统组成&#xff0c;以UnionFS&#xff08;联合文件系统&#xff09;堆叠构成Dockerfile中的每个指令都会创建一个新的镜像层镜像层将被缓存和复用当Dockerfile的指令修改了&#xff0c;复制的文件变化了&#xff0c;或者…

02 HAL库驱动按键响应外部中断

引言&#xff1a;这里我采用的实验平台可能跟大家的不太一样&#xff0c;文章的图像是一块资源拓展板&#xff0c; 主控板式fs_mp1a, 该板子的SOC是stm32mp157a&#xff0c; 有两个内核一个A7&#xff0c; 一个M4.但是实验的流程肯定都是一样的&#xff0c; 因为都是裸机程序嘛…

【PTA-C语言】实验七-函数与指针I

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 目录——实验七-函数与指针I 6-1 弹球距离&#xff08;分数 10&#xff09;6-2 使用函数输出一个整数的逆序数&#xff08;分数 10&#xff09;6-3 使用函数求最大公约数&#xff08;分数 10&#xff09;6-4…

Visual Studio 2015 中 SDL2 开发环境的搭建

Visual Studio 2015 中 SDL2 开发环境的搭建 Visual Studio 2015 中 SDL2 开发环境的搭建新建控制台工程拷贝并配置 SDL2 开发文件拷贝 SDL2 开发文件配置 SDL2 开发文件 测试SDL2 开发文件的下载链接 Visual Studio 2015 中 SDL2 开发环境的搭建 新建控制台工程 新建 Win32 …

从2023看2024前端发展趋势

前言 流光溯影&#xff0c;纵观2023全年&#xff0c;整个前端业界呈现出百业凋零之状&#xff0c;更不乏有“前端已死”等论调甚嚣尘上。从全局视角看IT行业&#xff0c;除了AI领域的大语言模型爆发外&#xff0c;整体都鲜有特别亮眼及突出的技术展现。故而&#xff0c;作为IT…

blender插件开发

Quickstart — Blender Python API Blender Python 编程&#xff1a;关键概念 - 知乎 系列目录链接&#xff08;更新中&#xff0c;如无链接说明未更新&#xff09; [Blender Python] 列出/插入/删除物体&#xff0c;Blender数据对象 - 知乎 (zhihu.com)[Blender Python] 设…

【华为机试】2023年真题B卷(python)-猴子爬山

一、题目 题目描述&#xff1a; 一天一只顽猴想去从山脚爬到山顶&#xff0c;途中经过一个有个N个台阶的阶梯&#xff0c;但是这猴子有一个习惯&#xff1a; 每一次只能跳1步或跳3步&#xff0c;试问猴子通过这个阶梯有多少种不同的跳跃方式&#xff1f; 二、输入输出 输入描述…

深度学习核心技术与实践之计算机视觉篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分 计算机视觉背景 &#xff08;1&#xff09;视觉皮层的神经元是一列一列组织起来的&#xff0c;每一列神经元只喜欢某一种特定的形状或者某些简单的线条组合&#xff0c;而不是鱼、老鼠、鲜花 &#xff08;2&#xf…

记矩阵基础概念

转自up&#xff1a;Naruto_Qcsdn&#xff1a;三维空间几何变换矩阵 先贴个站里分享的基础概念。 learn form 肥猫同学VFX b站&#xff1a;会用transform就会用矩阵 移动 旋转 缩放 1.transofrm ——输出变化矩阵 可以移动transform查看变化去理解 位移 缩放 旋转 由此—…

一个有趣的MOSFET电路-触摸调光电路

来源 刷B站视频&#xff0c;看到一个很新奇的“触摸调光电路”&#xff0c;电路图如下&#xff1a; 视频在这里&#xff0c;只使用了3个元件。 刚好最近在学模拟电路的 MOSFET&#xff0c;我之前的理解是 MOSFET 的控制电压应该加在 Gate 和 Source 之间&#xff0c;也就是 栅…

python非常好用的文件系统监控库

如果你不想使用Watchdog库&#xff0c;而是自己编写代码来监视文件系统的变化&#xff0c;可以使用Python的内置模块os和time来实现。 下面是一个简单的示例代码&#xff0c;演示如何使用os和time模块来监视文件系统中文件的变化&#xff1a; pythonimport osimport timedef m…