← 返回学习单
1

什么是聚类

聚类是一种将数据自动分组的机器学习技术,其核心目标是让同一组(簇)内的数据尽可能相似,而不同组之间的数据尽可能不同。 就像整理书桌时,我们会把文具、书本、电子设备分类摆放一样,聚类算法通过分析数据特征,智能地将未标注的数据划分到有意义的类别中。

例如,电商平台可以用聚类对用户分组实现精准营销,生物学家能通过基因聚类发现潜在物种关系。 与有监督的"分类"不同,聚类属于无监督学习,不需要预先提供标签,而是让数据自主"物以类聚"。

常见的聚类方法包括K-means、层次聚类、DBSCAN等。

现实应用场景

  • 客户细分: 电商平台根据用户购买行为将客户分组,制定个性化营销策略
  • 图像处理: 通过减少图像中使用的颜色数量来压缩图像或实现图像分割
  • 文档分类: 自动将相似主题的文档归类,辅助内容组织和信息检索
  • 异常检测: 通过识别与主要簇距离较远的数据点来检测异常现象
2

K-means 聚类算法简介

K-means聚类算法 是一种无监督学习算法,这意味着它不需要人为标记的训练数据,而是能够自主发现数据中的模式和结构,将相似的数据点归为一组。

在算法名称中,"K"代表我们希望将数据分成的的数量。算法通过迭代找到每个簇的中心点,称为"质心",并将数据点分配到最近的质心所代表的簇中。

K-means 聚类算法工作流程

1

选择 K 值

确定将数据分成几个群组

2

选择质心

随机选择 K 个点作为初始簇中心

3

分配数据点

将每个数据点分配到最近的质心所在的簇

4

迭代质心

重新计算每个簇的中心点,重复步骤2和3直到质心位置稳定

3

算法可视化演示

3
50
迭代次数: 0
准备就绪
4

算法分步解读

第一步:选择 K 值

K-means 算法的第一步是选择要将数据分成多少个簇。这个值需要根据实际问题数据特点来确定。选择合适的 K 值对算法效果至关重要。

如果不确定最佳的 K 值,可以使用后面将介绍的肘部法则来辅助确定。

第二步:初始化质心

在确定了 K 值后,算法会随机选择 K 个位置作为初始质心。这些质心代表着各个簇的中心点。

初始质心的选择会影响算法的收敛速度最终结果。常见的初始化方法有随机选择和 K-means++ 等。

第三步:分配数据点

将每个数据点分配到与其距离最近的质心所代表的簇。距离通常使用欧几里得距离(直线距离)来计算,也可以根据具体问题选择其他距离度量方法。

第四步:迭代质心

重新计算每个簇的中心点。新的质心是簇内所有数据点坐标的平均值。这一步使得质心位置更能代表簇内数据的分布。

对于簇 j,新的质心计算公式为: 质心 j = (簇 j 中所有点的坐标和) / (簇 j 中点的数量)

重复步骤二和步骤三,直到满足终止条件。常见的终止条件包括:

  • 质心位置不再明显变化
  • 数据点的簇分配不再变化
  • 达到预设的最大迭代次数

算法结果

算法收敛后,我们得到的是 K 个簇以及每个簇的质心。此时,数据已经被分成了 K 个相似性较高的组,可以用于后续的分析和决策。

5

知识拓展:如何选择最佳的 K 值

在应用 K-means聚类算法时,我们常常面临一个问题:应该将数据分成多少个簇?肘部法则(Elbow Method)是一种常用的确定最佳 K 值的方法。

肘部法则的基本思想是:随着簇数量的增加,簇内数据点的总体距离(也称为误差平方和或畸变度)会逐渐减小,但增加到一定程度后,继续增加簇数对降低误差的效果会变得很小。

在误差与簇数量的关系图上,会出现一个"肘部",即曲线从陡峭变为平缓的拐点。这个拐点对应的 K 值往往是比较理想的簇数量。

肘部法则的工作原理:

  1. 对不同的 K 值(从 1 到某个上限)运行 K-means 聚类算法
  2. 对每个 K 值,计算所有数据点到其所属簇中心的距离平方和(即 WSS,Within-Cluster Sum of Squares)
  3. 绘制 WSS 随 K 变化的曲线图
  4. 寻找曲线中的"肘部",即曲线从陡降变为平缓的拐点

探索肘部法则

100
8
使用上方的控件设置参数,然后点击"计算肘部曲线"。
6

知识检测

选择题

1. K-means 算法属于哪一类机器学习方法?

2. K-means 算法中的"K"代表什么?

多选题

3. 以下哪些关于K-means 聚类算法的描述是正确的?(多选)

填空题

4. K-means 聚类算法中,每个数据点被分配到与其 的质心所在的簇。

5. 在迭代质心的过程中,我们将每个簇中各个数据点的 当作新的质心。

连线题

6. 请将左侧的概念与右侧的描述连接起来

质心
迭代
欧几里得距离
K值
决定将数据分为多少类
两点之间的直线距离
簇的中心点
重复执行算法步骤直到收敛