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

news/2024/5/20 6:59:19 标签: 算法, 聚类, kmeans, 学习

kmeans_0">聚类聚类的介绍及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 算法”就是其中一种。

kmeans_19">k-means算法

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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


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

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

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


http://www.niftyadmin.cn/n/5297766.html

相关文章

Windows磁盘空间占用分析工具-WizTree

文章目录 WizTree作用WizTree树状分析图WizTree特点获取网址 WizTree作用 平时我们电脑用久了,产生很多文件,导致盘符空间不足,但是不知道那些文件占用比较多,这就需要磁盘空间分析工具-WizTree来分析文件占用情况 WizTree树状分…

yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏

文章目录 1. 知识蒸馏理论2. yolov8 蒸馏代码应用2.1 环境配置2.2 训练模型(1) 训练教师模型(2) 训练学生模型baseline(3) 蒸馏训练3. 知识蒸馏代码详解3.1 蒸馏参数设置3.2 蒸馏损失代码讲解3.2.1 Feature based loss3.2.1 Logit loss3.3 获取蒸馏的feature map及channels

Linux驱动学习—pinctl和gpio子系统

1、pinctl和gpio子系统&#xff08;一&#xff09; 1.1pinctrl 子系统主要工作内容 <1>获取设备树中 pin 信息&#xff0c;管理系统中所有的可以控制的 pin&#xff0c; 在系统初始化的时候&#xff0c; 枚举所有可以控制的 pin&#xff0c; 并标识这些 pin。 <2>…

循环生成对抗网络(CycleGAN)

一、说明 循环生成对抗网络&#xff08;CycleGAN&#xff09;是一种训练深度卷积神经网络以执行图像到图像翻译任务的方法。网络使用不成对的数据集学习输入和输出图像之间的映射。 二、基本介绍 CycleGAN 是图像到图像的翻译模型&#xff0c;就像Pix2Pix一样。Pix2Pix模型面临…

SpringIOC之support模块ContextTypeMatchClassLoader

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Java8中list转map方法总结

背景 在最近的工作开发之中&#xff0c;慢慢习惯了很多Java8中的Stream的用法&#xff0c;很方便而且也可以并行的去执行这个流&#xff0c;这边去写一下昨天遇到的一个list转map的场景。 list转map在Java8中stream的应用 常用方式 1.利用Collectors.toMap方法进行转换 pu…

App.vue中引入自定义组件

components目录中定义组件&#xff1a;Person.vue 目录截图&#xff1a; Person.vue文件中内容&#xff1a; <template><div class"person"><h2>姓名&#xff1a;{{name}}</h2><h2>年龄&#xff1a;{{age}}</h2><!--定义了…

数据结构:堆的三部曲 (一)堆的实现

堆的实现 1.堆的结构1.1堆的定义理解 2.堆的实现&#xff08;以小根堆为例&#xff09;2.1 堆结构体的定义2.2 堆的插入交换函数向上调整算法插入函数的代码 2.3 堆的删除向下调整算法&#xff1a;删除函数的代码&#xff1a; 2.4其他操作 3.测试以及完整源代码实现3.1测试代码…