机器学习(k-means)
一、核心思想:物以类聚
想象一下,你有一堆散落的、未经分类的弹珠,你的任务是把它们按颜色分成 K 个组。
你不知道具体该怎么分,但你的直觉是:颜色相近的弹珠应该聚在一起。
K-means 做的就是这件事,只不过它处理的是数据点。它的目标很简单:将数据集中的样本划分成 K 个簇,使得同一簇内的样本彼此相似,而不同簇的样本相异。
“相似”在这里通常用距离来衡量,距离越近,越相似。
二、K-means 能做什么?(应用场景)
-
客户细分:将客户根据购买行为、年龄、兴趣等分成不同的群体,以便精准营销。
-
图像压缩:将图片中所有颜色减少到 K 种(用 K 个颜色代表所有像素的颜色),大幅减小文件体积。
-
文档分类:将文章或新闻自动聚类到不同的主题中。
-
异常检测:远离所有簇中心的数据点,可能是异常点或离群点。
三、工作原理:“猜中心,再归类,再调整”
K-means 算法是一个迭代过程,通常包含以下四个步骤。我们用一个将点分成2类(K=2)的例子来说明:
步骤 1: 初始化 - 随机选择 K 个中心点
-
算法首先随机在数据空间中选取 K 个点作为初始的簇中心,也叫质心。
-
在我们的例子中,随机选了2个质心(红叉和蓝叉)。
步骤 2: 分配阶段 - 将每个点分配到最近的中心点
-
计算每一个数据点到这 K 个质心的距离(通常是欧氏距离)。
-
将每个点分配给离它最近的那个质心所在的簇。
-
这样,所有数据点就被分成了 K 个簇。
步骤 3: 更新阶段 - 重新计算中心点
-
既然所有点都有了归属,那么每个簇的“中心”位置就应该更新了。
-
新的质心就是这个簇内所有数据点的平均值(mean,这就是算法名称中 “means” 的由来)。
-
从上图可以看到,红蓝两个叉移动到了新的位置。
步骤 4: 迭代 - 重复步骤 2 和 3,直到稳定
-
由于质心移动了,有些点离另一个质心更近了,所以需要重新分配。
-
分配之后,质心又会再次更新。
-
如此反复步骤2和3,直到质心不再发生明显变化(或者说数据点所属的簇不再改变),算法就收敛了。
---最终,我们得到了两个稳定的簇。
四、关键特点与优缺点
优点:
-
简单高效:原理和实现都非常简单,计算速度快,特别适合处理大规模数据集。
-
结果直观:簇的意义明确,就是围绕一个中心点的集合。
缺点:
-
需要预先指定 K 值:你必须事先知道想把数据分成几类。K值选择不当会得到很差的结果。
-
对初始值敏感:不同的初始随机质心可能会导致不同的最终结果。为了解决这个问题,通常会多次运行算法,选择结果最好的那次。
-
对异常值敏感:由于质心是取平均值,异常点会大幅拉拽质心的位置。
-
只能发现球状簇:它假设簇是凸形的和球状的,对于流形、环状等复杂形状的簇效果不好。
五、如何选择最佳的 K 值?
既然 K 值需要预先指定,那么如何确定最佳的 K 呢?最常用的方法是 手肘法。
-
原理:随着簇数量 K 的增加,所有数据点到其所属簇质心的平均距离(称为畸变程度)会减小。
-
做法:绘制 K 值与畸变程度的关系图。你会发现,当 K 增大到某个值时,再增加 K 所带来的距离减小幅度会骤降。这个拐点就像人的“手肘”,对应的 K 值通常是一个不错的选择。
*(上图中,K=3 可能是一个较好的选择)*
总结
K-means 是一个通过迭代、不断优化簇中心位置,来将数据点划分成 K 个紧凑且独立簇的无监督学习算法。 它的核心是“猜中心,再归类,再调整”,直到形成稳定的分组。
它是一个强大工具,是理解聚类分析乃至机器学习的一个完美起点。
更多推荐
所有评论(0)