首页 > 其他分享 >各种聚类方法的聚类思想介绍及其优缺点

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

时间:2024-07-23 20:30:00浏览次数:16  
标签:思想 means cdot 复杂度 优缺点 算法 聚类 预先指定

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

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

标签:思想,means,cdot,复杂度,优缺点,算法,聚类,预先指定
From: https://blog.csdn.net/wangxiaojie6688/article/details/140599958

相关文章

  • 前缀和(有意思的求区间值思想)
    第4题   前缀和 查看测评数据信息给一个有一个长度为n的数组a[1,2,...n]。数组a的前缀和定义为s[i]=a[1]+a[2]+...+a[i](对于所有的1<=i<=n),规定s[0]=0数组a的前缀和前缀最大值为max[i]=max(s[0],s[1],s[2],...s[i])(对于所有的0<=i<=n)数组a的1类和谐度为为max[i]中......
  • OOP思想
    面向对象编程(Object-OrientedProgramming,简称OOP)是一种广泛使用的编程范式,它基于“对象”的概念来设计和实现软件。OOP的主要思想是将数据和处理这些数据的方法捆绑在一起,形成一个独立的实体——对象,从而实现数据的封装、抽象、继承和多态性。以下是OOP的几个核心概念:1......
  • 时间序列分析方法汇总对比及优缺点和适用情况(下)-- 11. 卡尔曼滤波 12. 广义自回归条件
    目录11.卡尔曼滤波(KalmanFilter)12.广义自回归条件异方差模型(GARCH)13.贝叶斯结构时间序列模型(BayesianStructuralTimeSeries,BSTS)14.动态因子模型(DynamicFactorModel,DFM)15.隐马尔科夫模型(HiddenMarkovModel,HMM)16.分段线性回归(PiecewiseLinearRegress......
  • 模块1 课程准备 --- 第三章:建立面向对象的编程思想
    第三章建立面向对象的编程思想主要知识点:1、理解面向对象编程的基本思想。2、掌握面向对象编程的一般方法。3、能够运用Java语言编写简单的应用程序。学习目标:掌握面向对象编程的基本思想解释:面向过程编程从解决每一个步骤入手,适合于解决比较小的简......
  • 使用面向对象思想实现乐器弹奏
    题目乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。定义乐器类Instrument,包括方法make_sound()。定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin,定义一个函数可以弹奏各种乐器play(instrument),测试给乐手不同的乐器让他弹奏。代码c......
  • 模型 聚类模型
    零、写在前面所谓聚类,就是将样本划分为由类似的对象组成的多个类的过程。聚类后,我们可以更加准确的在每个类中单独使用统计模型进行估计、分析和预测;也可以探究不同类之间的相关性和主要差异。聚类模型中,有一个名词叫簇频繁出现,可以理解为类,一簇就是一类。聚类一般对对象分......
  • 基于卷积神经网络(CNNs)的无监督多模态子空间聚类方法
    基于卷积神经网络(CNNs)的无监督多模态子空间聚类方法引言基于卷积神经网络(CNNs)的无监督多模态子空间聚类方法是一种前沿技术,专门设计用于处理来自不同模态(如图像、文本、音频等)的高维数据,旨在自动学习表示并聚类这些数据,而无需任何标记信息。这种方法利用CNNs的特征提取能......
  • 鲁棒核稀疏子空间聚类模型(Robust Kernel Sparse Subspace Clustering, RKSSC)
    鲁棒核稀疏子空间聚类模型(RobustKernelSparseSubspaceClustering,RKSSC)引言鲁棒核稀疏子空间聚类模型(RKSSC)是一种用于处理高维数据的聚类技术,特别设计用于对抗数据中的噪声和异常值。该模型结合了稀疏表示、核方法和鲁棒优化策略,以在非线性子空间中寻找数据点的稀疏......
  • 聚类优化:Scikit-Learn中的数据标签分配艺术
    聚类优化:Scikit-Learn中的数据标签分配艺术在聚类分析中,标签分配是一个关键步骤,它直接影响聚类的解释性和实用性。Scikit-Learn(简称sklearn),作为Python中广受欢迎的机器学习库,提供了多种工具和方法来优化聚类标签的分配。本文将详细介绍这些方法,并提供详细的解释和代码示例......
  • 视觉探秘:sklearn中聚类标签的可视化之道
    视觉探秘:sklearn中聚类标签的可视化之道在数据科学领域,聚类分析是一种无监督学习方法,用于将数据集中的样本划分为若干个组或“簇”,使得同一组内的样本相似度高,而不同组之间的样本相似度低。Scikit-Learn(简称sklearn),作为Python中广受欢迎的机器学习库,不仅提供了多种聚类算法......