五分钟学完k-means

聚类算法有很多种,K-Means 是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。

K-Means 聚类算法的大致意思就是"物以类聚,人以群分":

算法流程


  1. 首先输入 k 的值,即我们指定希望通过聚类得到 k 个分组;
  2. 从数据集中随机选取 k 个数据点作为初始大佬(质心);
  3. 对集合中每一个小弟,计算与每一个大佬的距离,离哪个大佬距离近,就跟定哪个大佬。
  4. 这时每一个大佬手下都聚集了一票小弟,这时候召开选举大会,每一群选出新的大佬(即通过算法选出新的质心)。
  5. 如果新大佬和老大佬之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。
  6. 如果新大佬和老大佬距离变化很大,需要迭代3~5步骤。

说了这么多,估计还是有点糊涂,下面举个非常形象简单的例子:

有6个点,从图上看应该可以分成两堆,前三个点一堆,后三个点另一堆。现在我手工地把 k-means 计算过程演示一下,同时检验是不是和预期一致:

1.设定 k 值为2

2.选择初始大佬(就选 P1 和 P2)

3.计算小弟与大佬的距离:

从上图可以看出,所有的小弟都离 P2 更近,所以次站队的结果是:

A 组:P1

B 组:P2、P3、P4、P5、P6

4.召开选举大会:

A 组没什么可选的,大佬就是自己

B 组有5个人,需要重新选大佬,这里要注意选大佬的方法是每个人 X 坐标的平均值和 Y 坐标的平均值组成的新的点,为新大佬,也就是说这个大佬是"虚拟的"。因此,B 组选出新大哥的坐标为:P 哥((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)。

综合两组,新大哥为 P1(0,0),P哥(6.2,5.6),而P2-P6重新成为小弟。

5.再次计算小弟到大佬的距离:

这时可以看到P2、P3离P1更近,P4、P5、P6离P哥更近,所以第二次站队的结果是:

A 组:P1、P2、P3

B 组:P4、P5、P6(虚拟大哥这时候消失)

6.第二届选举大会:

同样的方法选出新的虚拟大佬:P哥1(1.33,1),P哥2(9,8.33),P1-P6都成为小弟。

7.第三次计算小弟到大佬的距离:

这时可以看到 P1、P2、P3 离 P哥1 更近,P4、P5、P6离 P哥2 更近,所以第二次站队的结果是:

A 组:P1、P2、P3

B 组:P4、P5、P6

我们可以发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们最开始设想的结果完全一致。

损失函数

其中,1/2是系数。这样做的好处是,当我们对损失函数进行求导时,系数1/2可以抵消掉平方的2,从而得到更简洁的导数表达式,方便迭代优化算法的实现。

通过引入这个系数,不会改变问题的本质,但在数学推导和实际计算中,可以简化一些步骤。

相关推荐
cxr828几秒前
细胞球运动追踪的卡尔曼滤波与力场插值算法 —— 活体内微米级颗粒实时定位与轨迹预测系统
算法
炘爚几秒前
C++(流类:istream /ostream/istringstream /ostringstream)
开发语言·c++·算法
哥布林学者8 分钟前
深度学习进阶(四)Transformer 整体结构
机器学习·ai
爱睡懒觉的焦糖玛奇朵10 分钟前
【工业级落地算法之打架斗殴检测算法详解】
人工智能·python·深度学习·学习·算法·yolo·计算机视觉
programhelp_11 分钟前
IBM OA 高频真题分享|2026最新-Programhelp 独家整理
人工智能·机器学习·面试·职场和发展·数据分析
练习时长一年18 分钟前
后端开发常用的skill推荐
人工智能·算法·职场和发展
漂流瓶jz19 分钟前
UVA-10384 推门游戏 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·深度优先·题解·aoapc·算法竞赛入门经典·uva
汀、人工智能25 分钟前
[特殊字符] 第1课:两数之和
数据结构·算法·链表·数据库架构··两数之和
cxr82827 分钟前
卡尔曼滤波与力场插值算法代码框架
算法
郝学胜-神的一滴28 分钟前
Pytorch自动微分模块:从原理到实战,解锁反向传播核心奥秘
服务器·人工智能·pytorch·python·深度学习·机器学习