聚类是一种无监督学习方法,旨在将数据集中的样本划分为若干个组,使得同一组内的样本相似度最大,而不同组之间的样本相似度最小。以下是几种常见的聚类方法及其思想、优缺点的介绍:
1. K-means 聚类
聚类思想:
- K-means 将数据分成 K 个簇,每个簇由一个中心(质心)代表。
- 算法通过迭代优化,使得每个簇中的样本与质心的距离平方和最小。
- 步骤:
- 随机初始化 K 个质心。
- 将每个样本分配到最近的质心。
- 重新计算每个簇的质心。
- 重复步骤 2 和 3,直到质心不再变化。
优点:
- 算法简单、易于实现。
- 计算速度快,适用于大规模数据集。
缺点:
- 需要预先指定 K 值。
- 对初始质心敏感,可能陷入局部最优。
- 适用于球状簇,不适合非球状簇或大小差异较大的簇。
2. 层次聚类(Hierarchical Clustering)
聚类思想:
- 层次聚类通过构建树状结构(树状图或树状结构)来进行聚类。
- 有两种方法:自底向上(凝聚型)和自顶向下(分裂型)。
- 凝聚型:每个样本开始时作为一个簇,不断合并最近的簇。
- 分裂型:所有样本开始时作为一个簇,不断分裂出最不相似的簇。
优点:
- 不需要预先指定簇的数量。
- 可以生成聚类树,提供聚类的层次结构。
缺点:
- 计算复杂度高,不适合大规模数据集。
- 对噪声和离群点敏感。
3. 密度聚类(DBSCAN)
聚类思想:
- DBSCAN 通过高密度区域的连通性定义簇。
- 算法通过两个参数:ε(epsilon,半径)和 MinPts(最小点数)来定义簇。
- 核心点:领域内包含至少 MinPts 个样本的点。
- 边界点:不属于核心点,但在某个核心点的领域内。
- 噪声点:既不是核心点也不是边界点。
优点:
- 不需要指定簇的数量。
- 可以识别任意形状的簇。
- 对噪声和离群点有较好的鲁棒性。
缺点:
- 参数 ε 和 MinPts 的选择对结果影响较大。
- 在高维空间中,效果可能不佳。
4. 高斯混合模型(GMM)
聚类思想:
- GMM 假设数据来自于若干个高斯分布,通过期望最大化(EM)算法进行聚类。
- 每个簇由一个高斯分布表示,EM 算法通过迭代估计模型参数(均值、协方差矩阵和混合系数)。
优点:
- 可以处理不同形状和大小的簇。
- 提供每个样本属于某个簇的概率,结果更加柔性。
缺点:
- 需要预先指定簇的数量。
- 对初始参数敏感,可能陷入局部最优。
5. 谱聚类(Spectral Clustering)
聚类思想:
- 谱聚类通过构建样本的相似矩阵并进行图划分来进行聚类。
- 算法通过计算相似矩阵的特征值和特征向量,将样本投影到低维空间,然后在低维空间进行聚类(例如,K-means 聚类)。
优点:
- 可以处理任意形状的簇。
- 在某些情况下,比传统的 K-means 聚类效果更好。
缺点:
- 计算复杂度高,不适合大规模数据集。
- 需要选择适当的相似度度量和特征值个数。
6. 均值漂移(Mean Shift)
聚类思想:
- Mean Shift 通过在样本密度的高峰处进行聚类。
- 算法通过在特征空间内移动点到密度最大的位置来定义簇。
- 重复移动点直到收敛,形成密度高峰处的簇。
优点:
- 不需要预先指定簇的数量。
- 可以识别任意形状的簇。
缺点:
- 计算复杂度高,不适合大规模数据集。
- 对带宽参数的选择敏感。
算法复杂度低的聚类算法
在实际应用中,选择算法时常常需要在性能和复杂度之间找到平衡。以下是一些算法复杂度较低的聚类算法:
1. K-means 聚类
复杂度:
- 初始化:O(k⋅n)O(k \cdot n)O(k⋅n),其中 kkk 是簇的数量,nnn 是数据点的数量。
- 每次迭代:O(k⋅n⋅d)O(k \cdot n \cdot d)O(k⋅n⋅d),其中 ddd 是数据的维度。
- 总体复杂度:在迭代次数 ttt 较小时为 O(t⋅k⋅n⋅d)O(t \cdot k \cdot n \cdot d)O(t⋅k⋅n⋅d)。
适用场景:
- 数据集较大,维度较低。
- 簇的形状较规则(球形)。
优点:
- 算法简单、易于实现。
- 计算速度快,适用于大规模数据集。
缺点:
- 需要预先指定簇的数量。
- 对初始质心敏感,可能陷入局部最优。
2. 单链(Single Linkage)层次聚类
复杂度:
- 构建距离矩阵:O(n2)O(n^2)O(n2)。
- 合并最近的簇:每次迭代 O(n2)O(n^2)O(n2)。
- 总体复杂度:O(n2logn)O(n^2 \log n)O(n2logn)。
适用场景:
- 中小规模数据集。
- 不需要预先指定簇的数量。
优点:
- 算法较简单,不需要预先指定簇的数量。
- 可以生成聚类树,提供聚类的层次结构。
缺点:
- 计算复杂度高于 K-means。
- 对噪声和离群点敏感。
3. 均值漂移(Mean Shift)
复杂度:
- 每次迭代:O(n2⋅d)O(n^2 \cdot d)O(n2⋅d)。
- 总体复杂度:取决于收敛的迭代次数。
适用场景:
- 不需要预先指定簇的数量。
- 可以识别任意形状的簇。
优点:
- 不需要预先指定簇的数量。
- 可以识别任意形状的簇。
缺点:
- 计算复杂度较高,适用于中小规模数据集。
- 对带宽参数的选择敏感。
4. Mini-Batch K-means
复杂度:
- 初始化:O(k⋅n)O(k \cdot n)O(k⋅n)。
- 每次迭代:O(b⋅k⋅d)O(b \cdot k \cdot d)O(b⋅k⋅d),其中 bbb 是 mini-batch 的大小。
- 总体复杂度:O(t⋅b⋅k⋅d)O(t \cdot b \cdot k \cdot d)O(t⋅b⋅k⋅d),其中 ttt 是迭代次数。
适用场景:
- 大规模数据集。
- 簇的形状较规则(球形)。
优点:
- 基于 K-means,减少了每次迭代的计算量。
- 适用于大规模数据集。
缺点:
- 需要预先指定簇的数量。
- 对初始质心敏感,可能陷入局部最优。
Mini-Batch K-means是一种改进版的K-means算法,它通过使用一个小批量(mini-batch)的数据点而不是整个数据集来计算每个簇的中心。这种方法的主要优点是它减少了计算复杂度,尤其是在处理大数据集时。以下是Mini-Batch K-means算法的基本步骤:
-
随机选择初始中心:与标准的K-means算法一样,Mini-Batch K-means也需要随机选择K个初始中心。
-
随机选择数据子集:从整个数据集中随机选择一个小的数据子集,这个子集被称为"mini-batch"。
-
计算mini-batch中每个数据点与所有中心之间的距离:使用欧几里得距离或其他距离度量来计算每个数据点与所有K个中心之间的距离。
-
分配数据点:将mini-batch中的每个数据点分配到与其最近的中心所在的簇。
-
更新中心:根据mini-batch中每个簇的数据点计算新的中心。计算新中心的方法可以是取所有属于该簇的数据点的均值,也可以是其他方法,如取median或中位数。
-
重复步骤2-5:重复步骤2-5,直到满足某个停止条件,如中心变化小于某个阈值,或者迭代次数达到预设的最大次数。
-
使用所有数据点重新计算中心:在完成所有mini-batch迭代之后,可以使用所有数据点重新计算每个簇的中心,以确保每个中心都反映了整个数据集的信息。
Mini-Batch K-means的优点是它减少了每次迭代时需要计算的距离数量,从而提高了算法的计算效率。然而,这也可能导致算法收敛到局部最优解,而不是全局最优解。因此,在实际应用中,可能需要多次运行Mini-Batch K-means,每次都使用不同的mini-batch,以找到更好的聚类结果。
总结
对于计算复杂度较低的聚类算法,K-means 和 Mini-Batch K-means 是较好的选择,尤其适用于大规模数据集。尽管它们都有需要预先指定簇数量的缺点,但其简单性和高效性使其在许多实际应用中非常受欢迎。层次聚类(单链)和均值漂移适用于中小规模数据集,虽然计算复杂度相对较高,但在不需要预先指定簇数量的场景中具有优势。