各种聚类方法的聚类思想介绍及其优缺点

聚类是一种无监督学习方法,旨在将数据集中的样本划分为若干个组,使得同一组内的样本相似度最大,而不同组之间的样本相似度最小。以下是几种常见的聚类方法及其思想、优缺点的介绍:

1. K-means 聚类

聚类思想

  • K-means 将数据分成 K 个簇,每个簇由一个中心(质心)代表。
  • 算法通过迭代优化,使得每个簇中的样本与质心的距离平方和最小。
  • 步骤:
    1. 随机初始化 K 个质心。
    2. 将每个样本分配到最近的质心。
    3. 重新计算每个簇的质心。
    4. 重复步骤 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(n2log⁡n)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算法的基本步骤:

  1. 随机选择初始中心:与标准的K-means算法一样,Mini-Batch K-means也需要随机选择K个初始中心。

  2. 随机选择数据子集:从整个数据集中随机选择一个小的数据子集,这个子集被称为"mini-batch"。

  3. 计算mini-batch中每个数据点与所有中心之间的距离:使用欧几里得距离或其他距离度量来计算每个数据点与所有K个中心之间的距离。

  4. 分配数据点:将mini-batch中的每个数据点分配到与其最近的中心所在的簇。

  5. 更新中心:根据mini-batch中每个簇的数据点计算新的中心。计算新中心的方法可以是取所有属于该簇的数据点的均值,也可以是其他方法,如取median或中位数。

  6. 重复步骤2-5:重复步骤2-5,直到满足某个停止条件,如中心变化小于某个阈值,或者迭代次数达到预设的最大次数。

  7. 使用所有数据点重新计算中心:在完成所有mini-batch迭代之后,可以使用所有数据点重新计算每个簇的中心,以确保每个中心都反映了整个数据集的信息。

Mini-Batch K-means的优点是它减少了每次迭代时需要计算的距离数量,从而提高了算法的计算效率。然而,这也可能导致算法收敛到局部最优解,而不是全局最优解。因此,在实际应用中,可能需要多次运行Mini-Batch K-means,每次都使用不同的mini-batch,以找到更好的聚类结果。

总结

对于计算复杂度较低的聚类算法,K-means 和 Mini-Batch K-means 是较好的选择,尤其适用于大规模数据集。尽管它们都有需要预先指定簇数量的缺点,但其简单性和高效性使其在许多实际应用中非常受欢迎。层次聚类(单链)和均值漂移适用于中小规模数据集,虽然计算复杂度相对较高,但在不需要预先指定簇数量的场景中具有优势。

相关推荐
武子康10 分钟前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
___Dream24 分钟前
【CTFN】基于耦合翻译融合网络的多模态情感分析的层次学习
人工智能·深度学习·机器学习·transformer·人机交互
西柚小萌新2 小时前
8.机器学习--决策树
人工智能·决策树·机器学习
阡之尘埃10 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
Java Fans15 小时前
深入了解逻辑回归:机器学习中的经典算法
机器学习
慕卿扬15 小时前
基于python的机器学习(二)—— 使用Scikit-learn库
笔记·python·学习·机器学习·scikit-learn
夏天里的肥宅水16 小时前
机器学习3_支持向量机_线性不可分——MOOC
人工智能·机器学习·支持向量机
Troc_wangpeng17 小时前
机器学习的转型
人工智能·机器学习
小言从不摸鱼17 小时前
【NLP自然语言处理】深入解析Encoder与Decoder模块:结构、作用与深度学习应用
人工智能·深度学习·神经网络·机器学习·自然语言处理·transformer·1024程序员节
小码贾18 小时前
评估 机器学习 回归模型 的性能和准确度
人工智能·机器学习·回归·scikit-learn·性能评估