Tracks
聚类是一种无监督机器学习技术,广泛应用于模式识别、图像分析、客户分析、市场细分、社交网络分析等领域,涵盖从航空到医疗等诸多行业。
它属于无监督学习,这意味着聚类算法不需要带标签的数据;这也是聚类相较于其他监督学习(如分类)的一大优势。本文将介绍什么是聚类、在何种商业场景中有用,并带您了解五种必备算法:
要点速览
- 聚类是无监督机器学习:无需带标签的数据
- K-Means 是最广泛使用的算法;DBSCAN 能处理噪声与不规则形状;层次聚类适合探索性分析
- 没有通用的“最佳”算法。根据数据形状、预期簇数与噪声水平进行选择
- 簇质量无法像监督模型那样衡量。使用轮廓系数或 Davies-Bouldin 指数作为参考,而非定论
- scikit-learn 实现了本文介绍的全部五种算法,另有五种可选
什么是聚类?
聚类是将一组对象进行排列,使同一组(称为簇)内的对象彼此之间比与其他组对象更为相似。数据从业者常在探索性数据分析阶段使用聚类,以发现数据中的新信息与模式。由于聚类是无监督学习,它不需要带标签的数据集。
聚类本身并非某个特定算法,而是一类要解决的通用任务。为达成这一目标,可以使用多种算法,它们对于“什么构成一个簇”以及“如何高效找到簇”的理解差异显著。
建立对聚类的直观认识
在深入算法细节之前,先用一个水果数据集的玩具示例来直观理解聚类。假设我们有一个包含三种水果的大型图像数据集:(i) 草莓,(ii) 梨,(iii) 苹果。
数据集中所有图像混在一起,您的任务是把相似的水果分到一起,即创建三个组,每个组只包含一种水果。这正是聚类算法要做的事情。

聚类分析的关键成功标准
与分类或回归等监督学习用例不同,聚类无法端到端完全自动化。它是一个迭代的信息发现过程,需要领域专业知识与人为判断,常常需要对数据与模型参数反复调整,才能达到期望结果。
更重要的是,由于聚类是无监督学习且不使用带标签数据,我们无法计算准确率、AUC、RMSE 等性能指标来比较不同算法或数据预处理技术。这使得评估聚类模型的表现具有挑战性且带有主观性。
聚类模型的关键成功标准包括:
- 是否可解释?
- 聚类的输出对业务是否有用?
- 是否学到了新信息或发现了聚类前并不知晓的数据模式?
衡量聚类质量
在没有标签的数据下,您无法计算准确率或 AUC。有两个指标可帮助量化簇之间的分离程度。常见的两种度量:
- 轮廓系数(Silhouette Score)衡量一个点相对其所属簇与其最近邻簇的相似度。范围为 -1 到 1;高于 0.5 通常表示簇分离较好。
- Davies-Bouldin 指数衡量每个簇与其最相似簇之间的平均相似度——越低越好。
二者在 scikit-learn 中均可用:sklearn.metrics.silhouette_score(X, labels) 与 sklearn.metrics.davies_bouldin_score(X, labels)。
1. K-Means
K-Means 是聚类任务中最常用的算法,主要因为步骤易于理解且 scikit-learn 的实现简洁。它是一种基于质心的算法,用户需预先定义要创建的簇数。
该簇数通常来自业务场景需求,或通过尝试不同取值并评估结果得到。
K-Means 聚类是迭代算法,会创建非重叠的簇,即数据集中的每个样本只能唯一地属于一个簇。理解 K-Means 的最简单方式是配合下面的示意图了解其步骤。您也可以在我们的Python 版 K-Means 聚类与R 版 K-Means 聚类教程中查看详细过程描述。
- 用户指定簇的数量。
- 根据簇数随机初始化质心。如下图第 1 次迭代,随机初始化了三个质心,分别以蓝、红、绿表示。
- 计算各数据点与每个质心的距离,并将每个数据点分配给最近的质心。
- 基于已分配的数据点重新计算质心的均值,从而改变质心位置,如第 2–9 次迭代所示,直到最终收敛。
- 迭代直至质心均值不再变化,或达到参数 max_iter(用户在训练时设定的最大迭代次数)。在 scikit-learn 中,max_iter 默认设置为 300。

图片来源:Learnbymarketing.com
2. MeanShift
与 K-Means 不同,MeanShift 算法无需指定簇数。算法会自动确定簇的数量,这在您不清楚数据包含多少个簇时相较 K-Means 具有明显优势。
MeanShift 同样基于质心,并以迭代方式为每个数据点分配簇。MeanShift 的最常见应用是图像分割任务。
MeanShift 基于核密度估计。与 K-Means 类似,MeanShift 迭代地将各数据点朝最近的簇质心移动(初始质心随机),并根据数据点最密集的方向在空间中移动每个点,即朝向众数(在 MeanShift 语境中,众数是局部区域内数据点密度最高的位置)。
因此,MeanShift 也被称为“寻众(Mode-seeking)”算法。其步骤如下:
- 任取一个随机点,并在其周围创建一个窗口。
- 计算该窗口内所有点的均值。
- 沿着朝向众数的方向移动窗口。
- 重复上述步骤直至收敛。

图片来源:ResearchGate
有关 MeanShift 的实践型分步讲解,请参阅我们的Mean Shift 聚类教程。
3. DBSCAN
DBSCAN,全称为基于密度的带噪声应用空间聚类(Density-Based Spatial Clustering of Applications with Noise),是一种无监督聚类算法,其前提是簇在空间中是由低密度区域分隔开的高密度区域。
相较于 K-Means 与 MeanShift,该算法的最大优势在于对离群点具有鲁棒性,即不会将离群点纳入任何簇。
DBSCAN 仅需用户提供两个参数:
-
围绕每个数据点创建的圆的半径,称为
epsilon -
minPoints,定义在该圆内将该点判定为核心点所需的最少数据点数量。
每个数据点周围都会以 epsilon 为半径画圆,DBSCAN 将点识别为核心点、边界点或噪声点。若包围该点的圆中点数不少于 minPoints,则该点为核心点。
若点数少于最小要求则为边界点;若在任一数据点的 epsilon 半径内均不存在其他点,则为噪声点。噪声点不会被归入任何簇(即离群点)。
DBSCAN 的常见用例如下:
- 在区分高密度与低密度簇方面表现出色;
- 适用于非线性数据集;
- 可用于异常检测,因为它会将噪声点分离出来而不分配到任何簇。
DBSCAN 与 K-Means 对比
比较 DBSCAN 与 K-Means,常见差异包括:
- K-Means 会将数据集中的所有样本聚到某个簇,而 DBSCAN 不会将噪声点(离群点)分配给任何有效簇
- K-Means 难以处理非“全局”形状的簇,而 DBSCAN 可平滑应对
- K-Means 假设数据点来自高斯分布,而 DBSCAN 不对数据做此类假设。
更多内容请参阅我们的DBSCAN 聚类算法指南,涵盖参数调优与示例。

图片来源:Medium
4. 层次聚类(Hierarchical Clustering)
层次聚类通过构建簇的层级结构来进行聚类。该方法分为两类。
- 自底向上(凝聚式,Agglomerative):一开始将每个观测当作一个簇,随后自下而上,两两合并观测,进而合并为更大的簇。
- 自顶向下(分裂式,Divisive):所有观测起始于同一簇,然后自上而下递归地进行拆分。
在分析社交网络数据时,层次聚类是最常见且最受欢迎的方法。图中的节点(分支)会根据它们之间的相似度进行比较。将若干相互关联的小节点组连接起来,便可形成更大的群组。
层次聚类的最大优势在于易于理解与实现。通常,其输出以如下图所示的图像进行分析,称为树状图(Dendrogram)。
更多内容请参阅我们的层次聚类教程,其中演示了如何在 Python 中构建与解读树状图。

图片来源:ResearchGate
5. BIRCH
BIRCH(Balanced Iterative Hierarchical Clustering)意为平衡迭代层次聚类。它用于超大规模数据集,在 K-Means 难以实际扩展的情况下发挥作用。BIRCH 算法将海量数据划分为小簇,并力求尽可能多地保留信息。随后再对这些小簇进行聚类以得到最终输出,而非直接对大型数据集聚类。
BIRCH 常与其他聚类算法配合使用,用于生成可供后者利用的信息摘要。与 K-Means 类似,用户需要定义训练 BIRCH 算法时的簇数。
使用 BIRCH 的一大好处是,它可以以渐进、动态的方式对多维数据点进行聚类,以在给定的内存与时间约束下构建质量尽可能高的簇。在大多数情况下,BIRCH 只需对数据库进行一次遍历,因此具备良好的可扩展性。
BIRCH 的最常见用例,是作为 K-Means 的内存高效替代方案,用于在内存或算力受限、K-Means 难以处理的大型数据集上进行聚类。
聚类的商业应用
聚类在媒体、医疗、制造、零售等行业都有广泛应用——凡是有大量无标签数据的地方,都能用到。以下是一些实用示例。
客户细分
根据客户的购买行为或兴趣使用聚类算法进行分组,以制定聚焦的营销活动。
想象您有 1000 万客户,需要制定个性化或聚焦的营销活动。显然不可能做出 1000 万个活动,那我们怎么办?可以用聚类将 1000 万客户分成 25 个簇,然后设计 25 个营销活动,而不是 1000 万个。

图片来源:Medium
零售聚类
零售业务中有许多聚类机会。例如,您可以收集每家门店的数据,并在门店层面进行聚类,以洞察哪些门店在客流量、平均销量、SKU 数量等属性上彼此相似。
另一个例子是在品类层面聚类。下图中有 8 家门店,不同颜色代表不同集群。本例共有 4 个集群。
注意,门店 1 的除臭剂品类属于红色集群,而门店 2 的除臭剂品类则属于蓝色集群。这表明在除臭剂品类上,门店 1 与门店 2 面向的目标市场完全不同。

图片来源:dotactiv.com
临床护理/疾病管理中的聚类
医疗与临床科学在聚类方面尤为典型。如下例所示,Komaru & Yoshida 等人在 2020 年发表的研究中,收集了 101 位患者的人口统计与实验室数据,并将其分为 3 个聚类。
每个聚类由不同的状况代表。例如,簇 1 为低 WBC 与低 CRP 患者;簇 2 为高 BMP 与高血清患者;簇 3 为低血清患者。每个聚类在血液透析后 1 年死亡率的背景下,代表不同的生存轨迹。

图片来源:elsevierhealth.com
图像分割
图像分割是将一幅图像划分为不同组的过程。关于使用聚类进行图像分割的研究非常多。如果您想在图像中分离出对象并分别分析其“是什么”,这类聚类就很有用。
下例中,左侧是原始图像,右侧是聚类算法的结果。可以清楚看到有 4 个簇,即根据像素划分出的 4 个不同对象(老虎、草地、水与沙地)。
聚类算法对比
在流行的 Python 机器学习库scikit-learn中,实现在案的无监督聚类算法有 10 种。各算法在如何识别并分配数据集中的簇方面存在根本差异。
这些算法在数学范式上的差异大致可归结为四个方面,便于我们对比:
- 模型所需的参数
- 可扩展性
- 适用场景
- 几何度量,即用于计算距离的度量方式
在下图中,每一列代表一种不同聚类算法(如 K-Means、亲和传播、MeanShift 等)的输出。共有 10 种算法在同一数据集上训练。
部分算法给出了相同的输出。请注意,凝聚层次聚类、DBSCAN、OPTICS 与谱聚类得出了相同的簇。
然而,将 K-Means 与 MeanShift 的输出对比,您会发现两者结果不同。K-Means 仅得到两个组(蓝与橙),而 MeanShift 得到三个(蓝、绿、橙)。

图片来源:scikit-learn
遗憾(或幸运)的是,聚类并不存在对错分明的答案。若能轻松地断言“某算法在此表现最佳”,那就太简单了。
这并不可行,也正因如此,聚类是一项颇具挑战性的任务。
归根结底,哪种算法更合适并不取决于某个易于量化的指标,而取决于对结果的解释以及其对当前用例的实用价值。
如何选择合适的聚类算法
不同算法适用于不同的数据条件。请将下表作为起点,然后在您的真实数据上至少测试两种算法再做决定。
| 算法 | 适用场景 | 主要局限 | 所需参数 |
|---|---|---|---|
| K-Means | 大型数据集,簇大致呈球形 | 对离群点敏感;需预先给定 k |
簇的数量(k) |
| MeanShift | 簇数未知;图像分割 | 在大数据集上较慢;带宽难以设定 | 带宽(可自动估计) |
| DBSCAN | 含噪声数据;不规则簇形;异常检测 | 当簇的密度差异很大时表现不佳 | epsilon、minPoints |
| 层次聚类 | 探索性分析;社交网络数据;小型数据集 | 内存占用大;不适合上百万行规模 | 合并方式(ward、complete、average) |
| BIRCH | 超大数据集,K-Means 会内存不足 | 在小数据集上精度不如 K-Means | 分支因子、阈值、簇的数量 |
一个实用起点:先用 K-Means 获取速度优势;若数据具有不规则形状或存在离群点,则改用 DBSCAN;当您希望先通过树状图直观探索簇结构,再决定 k 时,使用层次聚类。
结语
与分类与回归等监督技术相比,聚类更难应用,原因有二:无法与带标签的目标进行性能对比衡量;并且诸如簇数这类参数更多依赖领域判断,而非算法自动选择。
聚类是一项跨岗位的通用技能:数据科学家、ML 工程师与分析师都会遇到可用聚类解决的问题。
如果您想进一步学习聚类与无监督机器学习,并用 Python 与 R 动手实现,以下课程可助您精进:
常见问题解答(FAQs)
聚类是无监督还是监督机器学习?
聚类是无监督机器学习技术。训练不需要带标签的数据。
聚类需要带标签数据吗?
不需要,聚类算法不需要带标签数据。若您有带标签的数据,应使用监督的分类算法。
可以对类别型数据进行聚类吗?
需要。与监督学习类似,若数据中包含类别型特征,需要使用如独热编码等方式进行编码。也有一些算法(如 K-Modes)可直接处理类别型数据而无需编码。
聚类是机器学习吗?
是的,聚类属于机器学习,具体来说是无监督机器学习。
聚类属于描述性分析还是预测性分析?
聚类可用于描述性分析与预测性分析,两者皆可。更常见的是在探索性数据分析(描述性分析)中使用。
我们能衡量聚类算法的性能吗?
不像监督学习(AUC、准确率、R2 等)那样有确定的性能度量。模型质量取决于对输出的解释与用例。然而,也有一些折中指标可供参考,如同质性分数(Homogeneity Score)、轮廓系数(Silhouette Score)等。
能将聚类用于监督机器学习中的特征工程吗?
可以。聚类算法会为数据集中的样本分配组标签。最终会在数据集中新增一个类别型列。因此,聚类常用于监督学习任务中的特征工程。