聚类算法:经典与新经典方法解析
1. 经典聚类方法
1.1 基于质心的聚类
基于质心的聚类也称为基于划分的聚类。这种聚类方法通常遵循以下步骤:
1. 根据输入数据随机生成 k 个初始聚类。
2. 找到每个聚类的质心。
3. 将输入数据点分配到质心最近的聚类中,以最小化聚类中数据与质心之间的距离。
4. 调整质心的位置,并迭代该过程,直到收敛到最优聚类结果。
质心是指聚类中数据点的平均值。代表性的基于质心的聚类算法有:
-
k - means
:质心是聚类的中心,即聚类的几何中心,但不一定是聚类中的数据点。
-
k - medoids
:质心是聚类的中心点,是聚类中的一个数据点,但不一定是聚类的几何中心。
1.2 基于分布的聚类
基于分布的聚类是基于数据的概率分布进行的聚类。该方法基于这样的假设:数据在采样过程中满足某种概率分布,如正态分布或二项分布。
基于分布的聚类中常用的是使用期望最大化(EM)算法的高斯混合模型(GMM)。在高斯混合模型中,通常使用固定数量的高斯分布来对数据集进行建模,以避免过拟合。这些高斯分布被随机初始化,并迭代优化其参数,以更好地划分数据集。多次迭代可能会产生不同的结果,并最终收敛到局部最优。因此,同一聚类中的数据都属于同一分布。
与 k - means 算法相比,两者都根据一定标准将输入数据分配到聚类中,但 k - means 最小化每个聚类中数据点的平方距离,而高斯混合模型给出这些数据点被分配到某个聚类的概率。
1.3 基于密度的聚类
基于密度的聚类根据数据所在区域的密度,将每个相连的高密度数据区域划分为相应的聚类。分散的低密度数据区域将这些聚类区分开来,位于这些区域的数据点被视为噪声或离群点。
基于密度的聚类可以看作是一种非参数方法,因为它不对聚类的数量或分布做任何假设。而且,由于高密度数据区域的局部性质,每个高密度数据区域可以有任何形状。
基于密度的聚类算法需要解决两个关键问题:
1. 如何定义数据点的密度。
2. 如何确定数据点的连通性。
例如,基于密度聚类的 DBSCAN(基于密度的空间聚类应用与噪声)方法,通过密度阈值定义高密度区域中的最小数据点数,通过距离阈值确定高密度区域的最大半径,这被称为密度可达性聚类模型。另一种称为 OPTICS(排序点以识别聚类结构)的算法是 DBSCAN 的变体,它改进了对不同密度聚类的处理。
1.4 基于网格的聚类
基于网格的聚类方法用于多维数据集。该方法将多维数据空间划分为有限数量的单元格,形成网格结构,然后基于网格结构中的单元格形成聚类。每个聚类对应一个不同的区域,其中的数据点比其周围环境更密集。
基于网格的聚类的最大优点是显著降低了时间复杂度,特别是对于非常大的数据集。该方法不直接对数据点进行聚类,而是对由单元格表示的数据点邻域进行聚类。由于单元格的数量明显少于数据点的数量,基于网格的聚类性能明显高于直接对数据点进行聚类的方法。
基于网格的聚类算法通常涉及以下五个步骤:
1. 创建网格结构,即将数据空间划分为有限数量的单元格。
2. 计算每个单元格的密度。
3. 按单元格密度对单元格进行排序。
4. 识别每个聚类的中心。
5. 遍历相邻单元格。
代表性的基于网格的聚类算法包括:
-
STING
:代表“统计信息网格”,是一种基于统计信息网格的聚类算法。
-
WaveCluster
:使用小波变换进行多分辨率聚类。
-
CLIQUE
:代表“聚类问题”,用于基于网格和密度的高维数据空间聚类。
下面用 mermaid 流程图展示基于网格的聚类算法步骤:
graph LR
A[创建网格结构] --> B[计算每个单元格的密度]
B --> C[按单元格密度对单元格进行排序]
C --> D[识别每个聚类的中心]
D --> E[遍历相邻单元格]
2. 新经典聚类方法
与经典聚类方法不同,一些研究人员使用量子理论、谱图理论、元启发式算法和深度学习来探索新的聚类方法,我们称之为新经典聚类方法,也有研究人员称之为现代聚类方法。
2.1 量子聚类
量子聚类(QC),也称为基于量子理论的聚类,是一种使用量子力学概念和数学工具的聚类算法。其基本思想是基于能量场中粒子的分布来研究数据在尺度空间中的分布。
量子聚类方法于 2001 年首次提出,2009 年出现了其扩展版本,即动态量子聚类。
-
原始量子聚类
:给定 n 维数据空间中的一组数据点,量子聚类使用多维高斯分布来表示每个数据点,其宽度(标准差)为 σ,以空间中每个数据点的位置为中心。然后将这些高斯系数相加,为整个数据集创建一个单一的分布。这个分布被认为是数据集的量子力学波函数。量子聚类引入了量子势的概念,使用与时间无关的薛定谔方程构建势面,并使用数据集的波函数作为稳定解。势面中的低点对应于数据密度高的区域,然后使用梯度下降法将势面中的每个数据点向下移动,使数据点在附近的最小区域聚集。
-
动态量子聚类
:使用与原始量子聚类相同的势面,但用量子演化方法代替了原始的梯度下降法。使用与时间相关的薛定谔方程来计算每个波函数在给定量子势下随时间的演化,为数据空间中的每个数据点建立轨迹。重复上述演化过程,直到所有数据点停止移动。动态量子演化避免了梯度下降带来的大量无用局部极小值问题,但增加了时间复杂度。
2.2 谱聚类
谱聚类,也称为基于谱图理论的聚类,将数据集表示为谱图,其中节点表示数据点,边表示数据点之间的相似度。然后从谱图中提取相似度矩阵,并将矩阵中的特征向量映射到低维空间进行聚类。
经典聚类方法,如 k - means,通常适用于凸、紧凑的数据集。但当数据集呈现明显的非凸形状时,需要基于数据点的连通性而不是紧凑性进行聚类,因此基于谱图理论的聚类方法应运而生。谱聚类不仅适用于非凸数据集,也适用于凸数据集。
2.3 群体智能聚类
群体智能聚类是使用群体智能进行的聚类分析。群体智能是受自然启发的一系列人工智能算法,特别是生物集体行为,它可以为组合优化问题提供足够好的解决方案,特别是在信息不完整、不完善或计算资源有限的情况下。
聚类被视为一种组合优化问题,群体智能在解决复杂的组合优化问题方面很有效,因此被用于聚类。典型的群体智能聚类方法有:
-
基于蚁群优化(ACO)的聚类
:将数据视为蚂蚁,数据随机分布在二维网格上,根据蚂蚁的决策选择是否进行进一步操作,迭代该过程直到获得满意的聚类结果。
-
基于粒子群优化(PSO)的聚类
:将数据视为粒子,通过其他聚类算法获得粒子的初始聚类,根据聚类中心不断更新聚类,迭代该过程直到获得满意的聚类结果。
-
基于洗牌蛙跳算法(SFLA)的聚类
:模拟青蛙的信息交互,利用局部搜索和全局信息交互。
-
基于人工蜂群(ABC)的聚类
:模拟三种蜜蜂(蜂王、雄蜂和工蜂)的觅食行为,确定蜂群中的食物源,并利用局部信息和全局信息的交换进行聚类。
值得注意的是,元启发式聚类算法非常适合解决非凸聚类问题,因为它们可以找到全局解,而经典聚类算法(如 k - means)只能保证收敛到局部解。
2.4 深度聚类
深度聚类,也称为基于深度学习的聚类,是使用深度神经网络进行的聚类。成功的深度聚类方法都遵循相同的原则,即使用深度神经网络进行表示学习,然后将这些表示作为特定聚类方法的输入。
深度聚类自 2010 年代中期随着深度学习的快速发展而提出。经典聚类方法在处理大型、高维、隐含模式和复杂数据集时常常遇到困难,而深度聚类有效地解决了这些类型数据集的聚类问题。代表性的深度聚类方法可分为以下几类:
-
多阶段深度聚类
:有两个模块,依次连接并分阶段处理。两个模块分别完成表示学习和聚类分析的任务,即使用深度神经网络进行数据表示学习,然后将该表示输入经典聚类模块以获得最终的聚类分析结果。
-
迭代深度聚类
:对于表示学习和聚类分析这两个步骤,使用迭代处理方法,即根据表示计算聚类结果,并根据聚类结果更新表示。通过多次迭代,良好的表示有利于聚类,而聚类结果又为表示学习提供监督样本。
-
生成式深度聚类
:使用生成模型,如变分自编码器(VAE)和生成对抗网络(GAN),可以捕获、表示和重构数据点,提出关于潜在聚类结构的假设,然后通过估计数据密度推断聚类的划分。
-
同步深度聚类
:表示学习模块和聚类模块以端到端的方式同时处理。与大多数迭代深度聚类方法不同,它们不是以显式迭代的方式优化两个模块,因此可以同时更新。
下面用表格总结新经典聚类方法:
| 聚类方法 | 基本思想 | 适用场景 | 优点 | 缺点 |
| ---- | ---- | ---- | ---- | ---- |
| 量子聚类 | 基于量子力学概念和数学工具,研究数据在尺度空间的分布 | 复杂数据分布场景 | 能处理复杂数据分布 | 动态量子聚类时间复杂度高 |
| 谱聚类 | 将数据集表示为谱图,基于数据点连通性聚类 | 非凸数据集 | 适用于非凸和凸数据集 | 计算复杂度较高 |
| 群体智能聚类 | 利用群体智能解决聚类的组合优化问题 | 复杂组合优化聚类问题 | 能找到全局解 | 部分算法参数调整较复杂 |
| 深度聚类 | 使用深度神经网络进行表示学习和聚类 | 大型、高维、复杂数据集 | 有效解决复杂数据集聚类问题 | 模型训练复杂 |
3. 典型聚类算法
聚类算法众多,下面介绍一些具有代表性的聚类算法,包括 k - means、高斯混合聚类、DBSCAN 和基于密度峰值的聚类。
3.1 k - Means
k - means 是最常用的聚类算法,旨在将 n 个输入数据划分为 k 个聚类,每个数据点属于均值最近的聚类。
3.1.1 工作原理
给定 n 个输入数据 (D = {x_i | i = 1, \ldots, n}),其中每个数据 (x_i \in R^m) 是一个 m 维实向量,k - means 算法的目标是将数据集 (D) 划分为 k 个聚类 (G = {G_j | j = 1, \ldots, k})。设 (\mu_j) 是第 j 个聚类中所有数据的均值,也称为第 j 个聚类中心,其目标函数 (f) 为:
[f = \arg \min_{G} \sum_{j = 1}^{k} \sum_{x_i \in G_j} ||x_i - \mu_j||^2]
设 (t) 表示迭代次数,(\mu_1^{(1)}, \mu_2^{(1)}, \ldots, \mu_k^{(1)}) 是 k 个聚类的初始(即 (t = 1))均值,k - means 算法执行以下操作:
1.
分配
:将每个输入数据分配到一个聚类,使得该聚类的平方欧几里得距离最小。即对于所有 (j’),(1 \leq j’ \leq k),有:
[G_j^{(t)} = {x_i | ||x_i - \mu_j^{(t)}||^2 \leq ||x_i - \mu_{j’}^{(t)}||^2}]
2.
更新
:重新计算分配到每个聚类的输入数据的均值,以获得新的聚类中心。即:
[\mu_j^{(t + 1)} = \frac{1}{|G_j^{(t)}|} \sum_{x_i \in G_j^{(t)}} x_i]
3.
重复
:重复上述两个步骤,直到分配和更新的结果不再变化,达到收敛,k - means 算法结束。
3.1.2 示例流程
下面用 mermaid 流程图展示 k - means 算法的流程:
graph LR
A[随机生成 k 个初始均值] --> B[分配数据到最近的聚类]
B --> C[更新聚类中心]
C --> D{结果是否收敛?}
D -- 否 --> B
D -- 是 --> E[结束算法]
3.2 高斯混合聚类
高斯混合聚类使用高斯混合模型(GMM),基于数据的概率分布进行聚类。其基本步骤如下:
1.
初始化
:随机初始化固定数量的高斯分布及其参数。
2.
迭代优化
:使用期望最大化(EM)算法迭代优化高斯分布的参数,以更好地划分数据集。
3.
收敛判断
:多次迭代可能产生不同结果,最终收敛到局部最优。同一聚类中的数据都属于同一高斯分布。
3.3 DBSCAN
DBSCAN(基于密度的空间聚类应用与噪声)是一种基于密度的聚类算法。其操作步骤如下:
1.
定义参数
:定义密度阈值和距离阈值。
2.
密度计算
:计算每个数据点的密度,确定核心点(密度大于等于密度阈值的点)。
3.
聚类形成
:从核心点开始,通过密度可达性(在距离阈值内)连接相邻核心点及其邻域点,形成聚类。
4.
噪声识别
:将不属于任何聚类的点标记为噪声或离群点。
下面用表格对比 k - means、高斯混合聚类和 DBSCAN 算法:
| 算法名称 | 聚类依据 | 适用场景 | 优点 | 缺点 |
| ---- | ---- | ---- | ---- | ---- |
| k - means | 数据点到聚类中心的距离 | 凸、紧凑数据集 | 简单高效,收敛速度快 | 对初始聚类中心敏感,只能处理球形聚类 |
| 高斯混合聚类 | 数据的概率分布 | 复杂数据分布场景 | 能处理复杂数据分布,给出数据属于聚类的概率 | 计算复杂度较高,可能收敛到局部最优 |
| DBSCAN | 数据点的密度 | 任意形状的聚类,有噪声的数据 | 能发现任意形状的聚类,能识别噪声点 | 对密度和距离阈值敏感 |
3.4 基于密度峰值的聚类
基于密度峰值的聚类算法通过寻找数据集中的密度峰值点来确定聚类中心,然后将其他数据点分配到最近的聚类中心。其主要步骤如下:
1.
密度计算
:计算每个数据点的局部密度。
2.
距离计算
:计算每个数据点到密度比它大的点的最小距离。
3.
聚类中心确定
:根据局部密度和最小距离确定密度峰值点作为聚类中心。
4.
数据点分配
:将其他数据点分配到最近的聚类中心。
4. 总结
聚类算法在数据挖掘、机器学习等领域有着广泛的应用。经典聚类方法如基于质心、分布、密度和网格的聚类,各有其特点和适用场景。新经典聚类方法如量子聚类、谱聚类、群体智能聚类和深度聚类,利用了先进的理论和技术,为解决复杂的聚类问题提供了新的思路。
不同的聚类算法在处理不同类型的数据集时表现各异。例如,k - means 适用于凸、紧凑的数据集,而谱聚类和 DBSCAN 能处理非凸数据集。在实际应用中,需要根据数据集的特点和问题的需求选择合适的聚类算法。同时,也可以结合多种聚类算法的优点,以获得更好的聚类效果。
未来,随着数据量的不断增加和数据类型的日益复杂,聚类算法将面临更多的挑战和机遇。研究人员将继续探索新的聚类方法和技术,以提高聚类的准确性和效率。
超级会员免费看
656

被折叠的 条评论
为什么被折叠?



