Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据科学家必须要掌握的5种聚类算法

数据科学家必须要掌握的5种聚类算法

作者头像
AI科技大本营
发布于 2018-04-26 08:51:30
发布于 2018-04-26 08:51:30
9260
举报

编译 | AI科技大本营

参与 | 刘 畅

编辑 | 明 明

【AI科技大本营导读】聚类是一种将数据点按一定规则分群的机器学习技术。给定一组数据点,我们可以使用聚类算法将每个数据点分类到一个特定的簇中。理论上,属于同一类的数据点应具有相似的属性或特征,而不同类中的数据点应具有差异很大的属性或特征。聚类属于无监督学习中的一种方法,也是一种在许多领域中用于统计数据分析的常用技术。 在数据科学中,我们可以使用聚类分析,来获得一些有价值的信息。其手段是在应用聚类算法时,查看数据点会落入哪些类。现在,我们来看看数据科学家们需要掌握的5种常见聚类算法以及它们的优缺点! ▌K-均值聚类

K-Means可能是最知名的聚类算法,没有之一。在很多介绍性的数据科学和机器学习课程中,都有讲授该算法。并且该算法的代码很容易理解和实现!你可以通过看下面的插图来理解它。

K均值聚类

1、首先,我们选择一些要使用的类/组,并随机初始化他们各自的中心点(质心)。要计算出簇(类)的使用数量,最好的方法是快速查看一下数据并尝试鉴别有多少不同的分组。中心点是一个矢量,它到每个数据点的矢量长度相同,在上图中用“X”来表示。

2、每个数据点通过计算该点与每个簇中心之间的距离来进行分类,根据最小距离,将该点分类到对应中心点的簇中。

3、根据这些已分类的点,我们重新计算簇中所有向量的均值,来确定新的中心点。

4、重复以上步骤来进行一定数量的迭代,或者直到簇中心点在迭代之间变化不大。你也可以选择多次随机初始化簇中心点,然后选择看起来像是最佳结果的数据,再来重复以上步骤。

K-Means算法的优势在于它的速度非常快,因为我们所做的只是计算点和簇中心之间的距离; 这已经是非常少的计算了!因此它具有线性的复杂度O(n)。

但是,K-Means算法也是有一些缺点。首先,你必须手动选择有多少簇。这是一个很大的弊端,理想情况下,我们是希望能使用一个聚类算法来帮助我们找出有多少簇,因为聚类算法的目的就是从数据中来获得一些有用信息。K-means算法的另一个缺点是从随机选择的簇中心点开始运行,这导致每一次运行该算法可能产生不同的聚类结果。因此,该算法结果可能具有不可重复,缺乏一致性等性质。而其他聚类算法的结果则会显得更一致一些。

K-Medians是与K-Means类似的另一种聚类算法,它是通过计算类中所有向量的中值,而不是平均值,来确定簇的中心点。这种方法的优点是对数据中的异常值不太敏感,但是在较大的数据集时进行聚类时,速度要慢得多,造成这种现象的原因是这种方法每次迭代时,都需要对数据进行排序。

▌Mean-Shift聚类算法

Mean-Shift是一种基于滑动窗口的聚类算法。也可以说它是一种基于质心的算法,这意思是它是通过计算滑动窗口中的均值来更新中心点的候选框,以此达到找到每个簇中心点的目的。然后在剩下的处理阶段中,对这些候选窗口进行滤波以消除近似或重复的窗口,找到最终的中心点及其对应的簇。看看下面的图解。

用于单个滑动窗口的Mean-Shift聚类算法

1、为了阐释Mean-shift算法,我们可以考虑二维空间中的一组点,如上图所示。我们从一个以C点(随机选择)为中心,以半径r为核心的圆滑动窗口开始。Mean-shift可以看作是一种等高线算法,在每次迭代中,它能将核函数(圆滑动窗口)移动到每个迭代中较高密度的区域,直至收敛。

2、在每次迭代中,通过将中心点移动到窗口内点的平均值处(因此得名),来使滑动窗口移向更高密度的区域。滑动窗口内的数据密度与其内部点的数目成正比。当然,通过移动窗口中点的平均值,它(滑动窗口)就会逐渐移向点密度更高的区域。

3、我们继续根据平均值来移动滑动窗口,直到不能找到一个移动方向,使滑动窗口可以容纳更多的点。看看上面图片的动画效果;直到滑动窗口内不再增加密度(即窗口中的点数),我们才停止移动这个圆圈。

4、步骤1至步骤3的过程是由许多滑动窗口来完成的,直到所有的点都能位于对应窗口内时才停止。当多个滑动窗口重叠时,该算法就保留包含最多点的窗口。最终所有数据点根据它们所在的滑动窗口来确定分到哪一类。

下图显示了所有滑动窗口从头到尾的整个移动过程。每个黑点代表滑动窗口的质心,每个灰点代表一个数据点。

Mean-Shift聚类的整个过程

与K-means聚类算法相比,Mean-shift算法是不需要选择簇的数量,因为它是自动找寻有几类。这是一个相比其他算法巨大的优点。而且该算法的聚类效果也是非常理想的,在自然数据驱动的情况下,它能非常直观的展现和符合其意义。算法的缺点是固定了窗口大小/半径“r”。

▌基于密度的噪声应用空间聚类(DBSCAN)

DBSCAN是一种基于密度的聚类算法,类似于Mean-shift算法,但具有一些显著的优点。我们从看下面这个奇特的图形开始了解该算法。

DBSCAN笑脸人脸聚类

1、DBSCAN算法从一个未被访问的任意的数据点开始。这个点的邻域是用距离epsilon来定义(即该点ε距离范围内的所有点都是邻域点)。

2、如果在该邻域内有足够数量的点(根据minPoints的值),则聚类过程开始,并且当前数据点成为新簇中的第一个点。否则,该点将被标记为噪声(稍后,这个噪声点可能成为聚类中的一部分)。在这两种情况下,该点都会被标记为“已访问”。

3、对于新簇中的第一个点,它的ε距离邻域内的点也会成为同簇的一部分。这个过程使ε邻域内的所有点都属于同一个簇,然后对才添加到簇中的所有新点重复上述过程。

4、重复步骤2和3两个过程直到确定了聚类中的所有点才停止,即访问和标记了聚类的ε邻域内的所有点。

5、一旦我们完成了当前的聚类,就检索和处理新的未访问的点,就能进一步发现新的簇或者是噪声。重复上述过程,直到所有点被标记为已访问才停止。由于所有点已经被访问完毕,每个点都被标记为属于一个簇或是噪声。

与其他聚类算法相比,DBSCAN具有很多优点。首先,它根本不需要确定簇的数量。不同于Mean-shift算法,当数据点非常不同时,会将它们单纯地引入簇中,DBSCAN能将异常值识别为噪声。另外,它能够很好地找到任意大小和任意形状的簇。

DBSCAN算法的主要缺点是,当数据簇密度不均匀时,它的效果不如其他算法好。这是因为当密度变化时,用于识别邻近点的距离阈值ε和minPoints的设置将随着簇而变化。在处理高维数据时也会出现这种缺点,因为难以估计距离阈值ε。

▌使用高斯混合模型(GMM)的期望最大化(EM)聚类

K-Means算法的主要缺点之一就是它对于聚类中心平均值的使用太单一。通过查看下面的图例,我们可以明白为什么它不是使用均值最佳的方式。在左侧,人眼看起来非常明显的是,具有相同均值的数据中心点,却是不同半径长度的两个圆形簇。而K-Means算法不能解决这样的数据问题,因为这些簇的均值是非常接近的。K-Means算法在簇不是圆形的情况下也一样无效,也是由于使用均值作为集群中心。

K-Means算法两个失败的案例

相较于K-means算法,高斯混合模型(GMMs)能处理更多的情况。对于GMM,我们假设数据点是高斯分布的; 这是一个限制较少的假设,而不是用均值来表示它们是圆形的。这样,我们有两个参数来描述簇的形状:即均值和标准差!以二维为例,这意味着这些簇可以是任何类型的椭圆形(因为GMM在x和y方向上都有标准偏差)。因此,每个高斯分布都被单个簇所指定。

为了找到每个簇的高斯参数(例如平均值和标准差),我们将使用期望最大化(EM)的优化算法。请看下面的图表,可以作为匹配簇的高斯图的阐释。然后我们来完成使用GMM的期望最大化聚类过程。

使用GMM的EM聚类

1、我们首先选择簇的数量(如K-Means),然后随机初始化每个簇的高斯分布参数。可以通过快速查看数据的方式,来尝试为初始参数提供一个较好的猜测。不过请注意,从上图可以看出,这不是100%必要的,因为即使是从一个很差的高斯分布开始,算法也能很快的优化它。

2、给定每个簇的高斯分布,计算每个数据点属于特定簇的概率。一个点越靠近高斯的中心,它越可能属于该簇。在使用高斯分布时这应该是非常直观的,因为我们假设大部分数据更靠近簇的中心。

3、基于这些概率,我们为高斯分布计算一组新的参数,使得我们能最大化簇内数据点的概率。我们使用数据点位置的加权和来计算这些新参数,其中权重是数据点属于该特定簇的概率。为了更直观的解释这个,我们可以看看上面的图片,特别是黄色的簇。第一次迭代时,分布是随机开始,但是我们可以看到大部分黄点都在分布的右侧。当我们计算按概率加权的和时,即使中心附近的点大部分都在右边,通过分配的均值自然就会接近这些点。我们也可以看到,大部分数据点都是“从右上到左下”。因此,改变标准差的值,可以找到一个更适合这些点的椭圆,以最大化概率加权的总和。

4、重复迭步骤2和3,直到收敛,也就是分布在迭代中基本再无变化。

使用GMM方法有两个很重要的优点。 首先,GMM方法在聚类协方差上比K-Means灵活得多; 由于使用了标准偏差参数,簇可以呈现任何椭圆形状,而不是被限制为圆形。 K-mean算法实际上是GMM的一个特殊情况,即每个簇的协方差在所有维度上都接近0。其次,由于GMM使用了概率,每个数据点可以有多个簇。因此,如果一个数据点位于两个重叠的簇的中间,我们可以简单地定义它的类,即属于类1的概率是百分之X,属于类2的概率是百分之Y。即,GMM支持混合类这种情况。

▌凝聚层次聚类

分层聚类算法实际上分为两类:自上而下或自下而上。自下而上的算法首先将每个数据点视为一个单一的簇,然后连续地合并(或聚合)成对的簇,直到所有的簇都合并成一个包含所有数据点的簇。因此,自下而上的分层聚类被称为合成聚类或HAC。这个簇的层次可以用树(或树状图)表示。树的根是收集所有样本的唯一簇,叶是仅具有一个样本的簇。在进入算法步骤之前,请查看下面的图解。

合成聚类

1、我们首先将每个数据点视为一个单一的簇,即如果我们的数据集中有X个数据点,那么我们就有X个簇。然后,我们选择一个距离度量,来度量两个簇之间距离。作为一个例子,我们将使用平均关联度量,它将两个簇之间的距离定义为第一个簇中的数据点与第二个簇中的数据点之间的平均距离。

2、在每次迭代中,我们将两个簇合并成一个簇。选择平均关联值最小的两个簇进行合并。根据我们选择的距离度量,这两个簇之间的距离最小,因此是最相似的,所有应该合并。

3、重复步骤2直到我们到达树的根,即我们只有一个包含所有数据点的簇。通过这种方式,我们可以选择最终需要多少个簇。方法就是选择何时停止合并簇,即停止构建树时!

分层次聚类不需要我们指定簇的数量,我们甚至可以在构建树的同时,选择一个看起来效果最好的簇的数量。另外,该算法对距离度量的选择并不敏感;与其他距离度量选择很重要的聚类算法相比,该算法下的所有距离度量方法都表现得很好。当基础数据具有层次结构,并且想要恢复层次结构时,层次聚类算法能实现这一目标;而其他聚类算法则不能做到这一点。与K-Means和GMM的线性复杂性不同,层次聚类的这些优点是以较低的效率为代价,即它具有O(n3)的时间复杂度。

▌结论

数据科学家应该掌握的前5种聚类算法!感谢Scikit Learn工具箱,我们能用非常美的可视化图来展示更多聚类算法卓越的效果。

作者| George Seif 原文链接 https://towardsdatascience.com/the-5-clustering-algorithms-data-scientists-need-to-know-a36d136ef68

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Must Know! 数据科学家们必须知道的 5 种聚类算法
聚类是一种关于数据点分组的机器学习技术。给出一组数据点,我们可以使用聚类算法将每个数据点分类到特定的组中。理论上,同一组中的数据点应具有相似的属性或特征,而不同组中的数据点应具有相当不同的属性或特征(即类内差异小,类间差异大)。聚类是一种无监督学习方法,也是一种统计数据分析的常用技术,被广泛应用于众多领域。 在数据科学中,我们可以通过聚类算法,查看数据点属于哪些组,并且从这些数据中获得一些有价值的信息。今天,我们一起来看看数据科学家需要了解的 5 种流行聚类算法以及它们的优缺点。 一、K 均值聚类 K-
AI研习社
2018/03/28
1.3K0
Must Know! 数据科学家们必须知道的 5 种聚类算法
5种主要聚类算法的简单介绍
AiTechYun 编辑:Yining 聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有高度不同的属性和/或特征。聚类是一种无监督学习的方法,是许多领域中常用的统计数据分析技术。 在数据科学中,我们可以使用聚类分析从我们的数据中获得一些有价值的见解。在这篇文章中,我们将研究5种流行的聚类算法以及它们的优缺点。 K-MEANS聚类算法 K-Means聚类算法可能是大
AiTechYun
2018/03/27
1.4K0
5种主要聚类算法的简单介绍
通透!十大聚类算法全总结!!
这些聚类算法各有优缺点,适用于不同类型的数据和不同的应用场景。选择合适的聚类算法通常取决于具体的需求、数据的特性和计算资源。
Python编程爱好者
2023/11/28
6.1K0
通透!十大聚类算法全总结!!
数学建模--聚类分析
数学建模中的聚类分析是一种无监督学习方法,用于将数据集中的对象分组,使得同一组内的对象尽可能相似,而不同组的对象尽可能不同。这种方法的主要目的是通过分析数据的内在结构来发现数据中的潜在模式和规律。
用户11315985
2024/10/16
1890
数学建模--聚类分析
独家 | 如何正确选择聚类算法?
数据聚类是搭建一个正确数据模型的重要步骤。数据分析应当根据数据的共同点整理信息。然而主要问题是,什么通用性参数可以给出最佳结果,以及什么才能称为“最佳”。
数据派THU
2019/10/16
1.1K0
独家 | 如何正确选择聚类算法?
各种聚类算法的介绍和比较「建议收藏」
聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,不同数据尽量分离。
全栈程序员站长
2022/07/31
6.9K0
各种聚类算法的介绍和比较「建议收藏」
聚类算法,k-means,高斯混合模型(GMM)
什么是聚类算法?聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有高度不同的属性和/或特征。聚类是一种无监督学习的方法,是许多领域中常用的统计数据分析技术。
大数据技术与机器学习
2019/11/20
5.8K0
收藏!!无监督机器学习中,最常见的聚类算法有哪些?
但是,大多数情况下,在处理实际问题时,数据不会带有预定义标签,因此我们需要开发能够对这些数据进行正确分类的机器学习模型,通过发现这些特征中的一些共性,来预测新数据的类。
商业新知
2019/04/08
2.3K0
收藏!!无监督机器学习中,最常见的聚类算法有哪些?
【数据挖掘】聚类算法总结
一、层次聚类 1、层次聚类的原理及分类 1)层次法(Hierarchicalmethods)先计算样本之间的距离。每次将距离最近的点合并到同一个类。然后,再计算类与类之间的距离,将距离最近的类合并为一个大类。不停的合并,直到合成了一个类。其中类与类的距离的计算方法有:最短距离法,最长距离法,中间距离法,类平均法等。比如最短距离法,将类与类的距离定义为类与类之间样本的最短距离。 层次聚类算法根据层次分解的顺序分为:自下底向上和自上向下,即凝聚的层次聚类算法和分裂的层次聚类算法(agglomerative和di
陆勤_数据人网
2018/02/27
2.9K0
【数据挖掘】聚类算法总结
讲解K-Means聚类算法进行压缩图片
在计算机视觉领域中,图像压缩是一个重要的问题。在本文中,我们将介绍如何使用K-Means聚类算法来压缩图像。K-Means算法是一种常用的聚类算法,它可以将数据分成几个不同的簇,每个簇的数据点都具有相似的特征。
大盘鸡拌面
2023/12/15
4920
【Python】机器学习之聚类算法
这些聚类算法在不同场景和数据特性下有各自的优势和局限性,选择合适的算法取决于问题的性质和对结果的需求。聚类在图像分割、客户细分、异常检测等领域都有广泛的应用。
SarPro
2024/02/20
3380
【Python】机器学习之聚类算法
机器学习常用聚类算法大盘点,包括:原理、使用细节、注意事项
无监督学习是没有标记信息的学习方式,能够挖掘数据之间的内在规律,聚类算法的目的就是找到这些数据之间的内在性质和规律。
double
2019/10/22
1.9K0
机器学习常用聚类算法大盘点,包括:原理、使用细节、注意事项
使用高斯混合模型建立更精确的聚类
我真的很喜欢研究无监督学习问题。它们为监督学习问题提供了一个完全不同的挑战,用我拥有的数据进行实验的发挥空间要比监督学习大得多。毫无疑问,机器学习领域的大多数发展和突破都发生在无监督学习领域。
磐创AI
2019/11/18
1.1K0
使用高斯混合模型建立更精确的聚类
[机器学习算法]聚类学习
在无监督学习中unsupervised learning中,训练样本的标记信息是未知的,其目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。而此类学习任务中应用最广、研究最多的即聚类clustering。 以通俗的语言讲解,聚类学习将数据集中的样本分成若干个互不相交的子集(称为簇cluster)。保持簇内差异尽可能小而簇间差异尽可能大我们就可以将每个簇映射到一些潜在的类别。
TOMOCAT
2020/06/09
7840
[机器学习算法]聚类学习
机器学习聚类算法
聚类算法是一种无监督学习方法,用于将数据集中的样本划分为多个簇,使得同一簇内的样本相似度较高,而不同簇之间的样本相似度较低。在数据分析中,聚类算法可以帮助我们发现数据的内在结构和规律,从而为进一步的数据分析和挖掘提供有价值的信息。
@小森
2024/03/15
1710
机器学习聚类算法
K-means聚类算法
机器学习算法主要分为两大类:有监督学习和无监督学习,它们在算法思想上存在本质的区别。 有监督学习,主要对有标签的数据集(即有“参考答案”)去构建机器学习模型,但在实际的生产环境中,其实大量数据是处于没有被标注的状态,这时因为“贴标签”的工作需要耗费大量的人力,如果数据量巨大,或者调研难度大的话,生产出一份有标签的数据集是非常困难的。再者就算是使用人工来标注,标注的速度也会比数据生产的速度慢的多。
zhangjiqun
2024/12/14
1930
K-means聚类算法
算法金 | 再见!!!K-means
今天我们来聊聊达叔 6 大核心算法之 —— k-means 算法。最早由斯坦福大学的 J. B. MacQueen 于 1967 年提出,后来经过许多研究者的改进和发展,成为了一种经典的聚类方法。吴恩达:机器学习的六个核心算法!
算法金
2024/06/14
1510
算法金 | 再见!!!K-means
【机器学习】——K均值聚类:揭开数据背后的隐藏结构
在现代数据分析中,我们往往会遇到大量没有标签的数据。如何从这些数据中挖掘出有意义的结构和模式呢?这时,聚类分析就显得尤为重要。
用户11286421
2025/01/17
2130
【非监督学习 | 聚类】聚类算法类别大全 & 距离度量单位大全
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
计算机魔术师
2023/11/28
5080
相关推荐
Must Know! 数据科学家们必须知道的 5 种聚类算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档