六种常用聚类算法原理与应用场景全解析:K-Means、DBSCAN、层次聚类等
2026/7/29 6:58:52 网站建设 项目流程

1. 聚类算法:从“物以类聚”到数据洞察的桥梁

在数据科学和机器学习的工具箱里,有一类算法特别擅长于发现数据中“不言自明”的结构,它们不依赖预先标注好的标签,而是让数据自己“说话”,揭示其内在的群组关系。这类算法就是聚类算法。想象一下,你面对一堆散落的、未经分类的客户数据,或者是一组基因表达谱,你希望从中发现自然的类别,比如哪些客户行为模式相似,哪些基因在特定条件下协同表达。这时候,聚类算法就是你手中的“放大镜”和“分类器”。

简单来说,聚类就是将数据集中的样本划分成多个组(簇),使得同一个簇内的样本彼此相似,而不同簇的样本差异较大。这里的“相似”通常通过距离或密度来衡量。与分类(有监督学习)不同,聚类是无监督学习,它处理的是没有“标准答案”的数据,其目标不是预测,而是探索。这使得聚类在客户细分、异常检测、图像分割、社交网络分析、生物信息学等领域有着广泛的应用。今天,我们就来深入探讨六种在实际工作中最常被提及和使用的聚类算法,不仅理解它们“是什么”,更要搞懂它们“为什么”这样工作,以及在不同场景下“如何”选择和使用。

2. K-Means:经典的中心驱动划分法

K-Means无疑是聚类算法中最著名、最直观的一个。它的核心思想非常朴素:预先指定要划分的簇数量K,然后通过迭代优化,找到K个簇中心(质心),并将每个样本点分配到离它最近的簇中心所在的簇中。

2.1 算法流程与数学原理

K-Means的运作可以概括为以下几个步骤:

  1. 初始化:从数据集中随机选择K个点作为初始的簇中心(质心)。
  2. 分配:对于数据集中的每一个样本点,计算它与所有K个质心的距离(通常是欧氏距离),并将其分配给距离最近的那个质心所在的簇。
  3. 更新:重新计算每个簇中所有样本点的均值,将该均值点作为该簇新的质心。
  4. 迭代:重复步骤2和步骤3,直到满足停止条件。停止条件通常是质心的位置不再发生显著变化(变化小于某个阈值),或者达到了预设的最大迭代次数。

从数学优化角度看,K-Means是在最小化一个目标函数,即簇内平方和(Within-Cluster Sum of Squares, WCSS),也称为惯性(Inertia)。其公式为:WCSS = Σ(对于每个簇) Σ(对于簇内每个点) ||点 - 该簇质心||²算法的迭代过程就是不断寻找能使WCSS最小的质心位置和样本分配方案。

2.2 优势、局限与实战要点

K-Means的优势在于原理简单、计算高效,尤其适用于大规模数据集。当簇的形状接近球形(凸形)且大小相当时,效果很好。

然而,它的局限性也非常明显:

  • 需要预先指定K值:这是K-Means最大的痛点。K值选择不当会严重影响结果。常用的辅助方法有“肘部法则”(绘制不同K值对应的WCSS曲线,选择拐点)和“轮廓系数”(衡量簇内紧密度和簇间分离度)。
  • 对初始质心敏感:不同的随机初始质心可能导致不同的聚类结果。实践中通常采用多次运行(n_init参数)并选择WCSS最小的那次结果,或者使用更聪明的初始化方法如K-Means++。
  • 对异常值敏感:质心的计算是求均值,异常值会显著拉偏质心的位置。
  • 假设簇为凸形:对于非球形、流形或嵌套状的复杂结构数据,K-Means往往力不从心。

注意:在应用K-Means前,标准化或归一化数据是至关重要的一步。因为算法基于距离,如果特征量纲不同(例如,一个特征是“年薪(万元)”,另一个是“年龄”),量级大的特征将完全主导距离计算,导致聚类结果失真。常用的标准化方法有Z-score标准化(使均值为0,标准差为1)和Min-Max归一化(缩放到[0,1]区间)。

3. DBSCAN:基于密度的“抗噪”聚类法

如果说K-Means是“中心驱动”,那么DBSCAN(Density-Based Spatial Clustering of Applications with Noise)就是“密度驱动”。它不假设簇的形状,也不需要预先指定簇的数量,而是将簇定义为密度相连的点的最大集合,并能有效识别出噪声点(离群点)。这使得DBSCAN在处理任意形状的簇和含有噪声的数据集时表现优异。

3.1 核心概念与参数解析

理解DBSCAN的关键在于三个概念和两个参数:

  • 核心点:在指定半径eps(邻域半径)内,至少包含min_samples个点(包括自身)的点。

  • 边界点:在某个核心点的eps邻域内,但自身不是核心点的点。

  • 噪声点:既不是核心点也不是边界点的点。

  • 参数eps:邻域半径。它定义了点的“邻里范围”。太小会导致许多点被视为噪声,形成大量小簇;太大会使不同簇合并成一个。

  • 参数min_samples:成为核心点所需的邻域内最小点数。它决定了形成簇所需的最小密度。值越大,对核心点的要求越严格,形成的簇越“致密”。

3.2 算法过程与邻域查找优化

DBSCAN的算法过程可以描述为:

  1. 随机选择一个未访问的点。
  2. 如果该点是核心点,则以此为核心开始扩展,寻找所有从该点密度可达的点(通过核心点链式连接),形成一个簇。
  3. 如果该点是噪声点(非核心点),则标记为噪声并跳过。
  4. 重复上述过程,直到所有点都被访问。

关于“找到最精确的邻域的方法”:在DBSCAN中,查找一个点的eps邻域内所有点,本质是一个范围查询问题。最直接的方法是计算该点到数据集中所有其他点的距离,然后筛选出距离小于eps的点。这种方法的时间复杂度是O(n²),对于大数据集效率极低。

为了提高效率,通常采用空间索引数据结构来加速邻域查询,例如:

  • KD-Tree:适用于低维(例如<20维)欧氏空间。它能将数据空间递归地划分,查询时无需遍历所有点,平均复杂度可降至O(log n)。
  • Ball Tree:与KD-Tree类似,但划分的是超球面而非超矩形,在某些高维或度量空间下可能更有效。
  • R-Tree及其变体:更适合地理空间数据。

在Scikit-learn的实现中,默认会尝试构建KD-Tree或Ball Tree来加速。当数据维度非常高(导致“维度灾难”,索引效率下降)或数据量特别大时,也可以使用近似最近邻算法,或者通过调整algorithm参数使用更基础的暴力计算法。

3.3 实战心得与参数调优

DBSCAN的强大在于其发现任意形状簇和抗噪声的能力,但它对参数epsmin_samples非常敏感。

  • 参数调优经验:一个常用的启发式方法是观察k-距离图。对于每个点,计算它到第k个最近邻的距离(k通常取min_samples-1),对所有点的这个距离进行排序并绘图。图中“拐点”或“肘部”对应的距离值,常作为eps的一个良好初始估计。min_samples通常从较小的值(如数据维度的2倍)开始尝试。
  • 处理密度不均:DBSCAN的一个主要弱点是难以处理密度差异较大的簇。全局的epsmin_samples可能对稀疏簇过于严格(将其判为噪声),或对密集簇过于宽松(导致合并)。这时可以考虑其变体,如OPTICS算法,它能够产生一个簇排序,揭示不同密度的聚类结构。
  • 与K-Means对比选型:如果你的数据有明显的球形结构、簇大小均匀且噪声少,追求速度和可解释性,K-Means是首选。如果你的数据簇形状不规则、含有大量噪声或离群点,且你不知道簇的数量,DBSCAN是更强大的工具。

4. 层次聚类:构建数据的谱系树

层次聚类通过计算样本点之间的距离,构建一个嵌套的、具有层次结构的树(树状图)。它不需要预先指定簇的数量,而是提供从“每个点都是一个簇”到“所有点合并成一个簇”的完整层次视图,让使用者可以根据需要选择合适的切割层次。

4.1 两种策略:自底向上与自顶向下

  • 凝聚层次聚类:这是最常用的方法,属于“自底向上”的策略。开始时,每个样本点被视为一个独立的簇。然后,迭代地合并最“相似”(距离最近)的两个簇,直到所有点合并成一个簇,或满足某个停止条件(如达到预设的簇数)。
  • 分裂层次聚类:属于“自顶向下”的策略。开始时,所有样本点属于同一个簇。然后,迭代地将一个簇分裂成更小的簇,直到每个点都成为单独的簇。这种方法计算上更复杂,较少使用。

4.2 簇间距离度量:连接准则的选择

在凝聚聚类中,如何定义两个“簇”之间的距离是关键,这被称为“连接准则”。不同的准则会产生截然不同的树状图和聚类结果。

  • 单连接:两个簇之间的距离定义为两个簇中最近点对之间的距离。它容易产生“链式效应”,擅长发现非椭圆形的延伸结构,但对噪声敏感。
  • 全连接:两个簇之间的距离定义为两个簇中最远点对之间的距离。它倾向于产生紧凑的、大小相近的球状簇,对噪声相对稳健。
  • 平均连接:两个簇之间的距离定义为两个簇中所有点对之间的平均距离。是单连接和全连接的折中,相对平衡。
  • 沃德法:合并后能使总体簇内方差增加最小的两个簇。这种方法倾向于生成大小相似的簇,是许多场景下的默认选择,尤其与欧氏距离配合良好。

4.3 树状图的解读与应用

层次聚类的输出——树状图,是一个强大的可视化工具。纵轴表示距离,横轴是样本点。通过观察树状图,你可以:

  1. 决定簇数:在树状图上画一条水平切割线,与垂直线相交的数量就是簇的数量。切割的位置越高,得到的簇越少、越大;位置越低,簇越多、越小。通常选择在合并距离发生较大跳跃的高度进行切割。
  2. 理解层次关系:树状图清晰地展示了哪些样本或子簇在更早的阶段被合并,揭示了数据中不同粒度的分组关系。

层次聚类的优点在于可视化直观、无需预设K值、能提供丰富的层次信息。但其主要缺点是计算复杂度高,通常为O(n³)或O(n² log n),不适合大规模数据集(样本数n > 10000时需谨慎)。此外,一旦一个点被分配到一个簇,在后续的合并中就不再调整,这可能导致错误的累积。

5. 均值漂移聚类:寻找概率密度的峰值

均值漂移是一种基于概率密度梯度上升的非参数聚类算法。它不需要假设簇的形状或数量,其核心思想是:对于数据空间中的每一个点,都存在一个密度更高的区域,通过迭代地向该区域移动(漂移),最终所有收敛到同一点的样本被认为属于同一个簇。

5.1 核密度估计与漂移向量

均值漂移的基础是核密度估计。简单理解,它用一个“窗口”(由核函数和带宽参数决定)扫描数据空间,估算每个位置的“数据点密度”。

算法过程如下:

  1. 对每一个数据点(作为初始点)。
  2. 计算以该点为中心、带宽为h的窗口内所有点的均值。
  3. 将该点移动到计算出的均值位置。
  4. 重复步骤2和3,直到点的移动距离小于一个阈值(收敛)。
  5. 所有收敛到同一点(或非常接近的点)的初始点被归为同一簇。

其中,从当前点移动到窗口内均值的向量,就是“均值漂移向量”,它指向了局部密度增加最快的方向。

5.2 带宽参数:算法成败的关键

带宽参数bandwidth是均值漂移中唯一的关键参数,它控制了核窗口的半径,直接影响聚类结果:

  • 带宽过小:密度估计会呈现多峰状,每个数据点都可能成为一个簇中心,导致过拟合,产生大量微小簇。
  • 带宽过大:密度估计过于平滑,可能只有一个峰,导致所有数据被归为一个簇,造成欠拟合。

选择合适的带宽通常需要经验或通过交叉验证。Scikit-learn的estimate_bandwidth函数可以提供一种基于数据分位数的启发式估计。

均值漂移的优点是完全自动确定簇数、对任意形状的簇有效、理论优雅。但其缺点也很突出:计算复杂度高(约O(n²)),且对高维数据效果可能下降(维度灾难导致密度估计困难)。它更适合于中等规模、低维数据的聚类分析。

6. 谱聚类:图切割视角下的聚类

谱聚类将聚类问题转化为图分割问题,其性能经常优于传统的K-Means,尤其擅长处理非凸数据集。它首先根据数据点之间的相似性构建一个图,然后寻找一种切割图的方式,使得不同子图(簇)之间的连接尽可能弱,而子图内部的连接尽可能强。

6.1 从数据到图:相似性矩阵与拉普拉斯矩阵

谱聚类的第一步是构建一个相似性矩阵(或邻接矩阵)W,其中W[i][j]表示点i和点j的相似度(例如,使用高斯核函数计算的相似度:exp(-||x_i - x_j||² / (2 * σ²)))。

接着,构建拉普拉斯矩阵L。最常用的是归一化拉普拉斯矩阵L = I - D^{-1/2} W D^{-1/2},其中D是对角度矩阵,D[i][i] = Σ_j W[i][j]。拉普拉斯矩阵的性质决定了图的结构信息。

6.2 特征分解与降维聚类

谱聚类的核心步骤是:

  1. 计算拉普拉斯矩阵L的前k个最小的特征值对应的特征向量(k是目标簇数)。
  2. 将这些特征向量按列排列,形成一个n×k的矩阵(n是样本数)。
  3. 将这个矩阵的每一行视为原始数据在k维空间中的新表示。
  4. 对这个新的特征向量空间中的数据点,使用K-Means算法进行聚类。

为什么这样做?从图论角度看,找到最优的图切割对应于求解拉普拉斯矩阵的特定特征向量问题。通过取前k个特征向量,我们实际上将数据映射到一个新的低维空间(谱空间),在这个空间中,数据点更容易被线性地分开(即使它们在原始空间中是缠绕的非凸形状),从而使得简单的K-Means也能取得好效果。

6.3 适用场景与注意事项

谱聚类在以下场景表现突出:

  • 数据具有明显的“社区结构”,即簇内连接紧密,簇间连接稀疏。
  • 簇的形状复杂,非球形。
  • 图像分割、社交网络社区发现等任务。

它的主要挑战在于:

  • 需要指定簇数k:和K-Means一样。
  • 相似性矩阵构建:相似度度量(如高斯核的σ参数)的选择对结果影响很大。
  • 计算开销:构建相似性矩阵是O(n²),特征分解对于大规模矩阵也很耗时。通常需要采样或使用近似方法处理大数据。

7. 高斯混合模型:软分配的概率生成模型

高斯混合模型本质上是一个概率模型,它假设所有数据点是由多个高斯分布(即正态分布)混合生成的。每个高斯分布对应一个簇,拥有自己的均值向量和协方差矩阵。GMM提供的是“软分配”,即每个样本点属于各个簇的概率,而不是“硬分配”的类别标签。

7.2 期望最大化算法:求解GMM参数

GMM的参数(每个高斯分量的权重、均值、协方差)通常通过期望最大化算法来估计。EM算法是一个迭代过程,包含两步:

  • E步:基于当前参数,计算每个样本点属于每个高斯分量的后验概率(责任值)。
  • M步:基于E步计算出的责任值,重新估计高斯分量的参数(权重、均值、协方差),以最大化数据的似然函数。

EM算法保证了每一步迭代都能增加数据的似然值,最终收敛到一个局部最优解。

7.3 协方差矩阵类型与模型选择

GMM中每个高斯分量的协方差矩阵类型决定了簇的形状,常见选择有:

  • 'full':每个分量有自己的任意协方差矩阵。最灵活,能生成椭圆形的簇,但参数多,需要更多数据,可能过拟合。
  • 'tied':所有分量共享同一个协方差矩阵。生成的簇形状相同、大小相似,类似于K-Means的假设但更柔和。
  • 'diag':每个分量的协方差矩阵是对角矩阵。意味着特征间相互独立,簇的形状是轴对齐的椭圆。
  • 'spherical':每个分量的协方差矩阵是标量乘以单位矩阵。生成的簇是球形的,类似于K-Means。

如何选择分量数(簇数)?与K-Means类似,可以使用赤池信息准则贝叶斯信息准则。这些准则在模型拟合优度和复杂度之间进行权衡,选择使AIC或BIC值最小的模型(分量数)。

GMM的优势在于它是一个成熟的概率框架,能提供丰富的概率信息(软分配),并且通过协方差矩阵可以控制簇的形状。它常被用于密度估计、作为更复杂模型的组成部分。其缺点是对初始化敏感、可能收敛到局部最优、并且计算上比K-Means更重。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询