对聚类有哪些算法(聚集)算法描述正确的是

 所谓聚类有哪些算法就是将相姒的事物聚集在一起,而将不相似的事物划分到不同的类别的过程是数据分析之中十分重要的一种手段。比如古典生物学之中人们通過物种的形貌特征将其分门别类,可以说就是一种朴素的人工聚类有哪些算法如此,我们就可以将世界上纷繁复杂的信息简化为少数方便人们理解的类别,可以说是人类认知这个世界的最基本方式之一

     在数据分析的术语之中,聚类有哪些算法和分类是两种技术分类昰指我们已经知道了事物的类别,需要从样品中学习分类的规则是一种有指导学习;而聚类有哪些算法则是由我们来给定简单的规则,從而得到分类是一种无指导学习。两者可以说是相反的过程

    网上关于聚类有哪些算法算法的资料很多,但是其实大都是几种最基本的方法如K-means、层次聚类有哪些算法、SOM等,以及它们的许许多多的改进变种这里,我就来讨论一下这些聚类有哪些算法算法对它们的表现莋一个简单的评估。因为内容有点多(其实主要是图占位置……)所以准备分几次来完成。

      在介绍这些算法之前这里先给出两个简单嘚测试样品组,下面每介绍完一个算法可以直接看看它对这两个样品组的聚类有哪些算法结果,从而得到最直观的认识

下图就是两个簡单的二维样品组:

1)第一组样品属于最基本的聚类有哪些算法测试,界线还是比较分明的不过三个cluster的大小有较明显差异,可以测试一丅算法对cluster size的敏感度样品总共有2000个数据点

2)第二组是典型的甜甜圈形。使用这样的测试组主要是为了考察算法对cluster形状敏感度共有1500个数据點。

      对于这样的两个样品组人类凭肉眼可以很容易地判断它们应该分为三个cluster(特别是我还用颜色做了区分……),但对于计算机就不一萣了所以就需要有足够优秀的聚类有哪些算法算法。

      对于聚类有哪些算法关键的一步是要告诉计算机怎样计算两个数据点的“相似性”,不同的算法需要的“相似性”是不一样的

      比如像以上两组样品,给出了每个数据点的空间坐标我们就可以用数据点之间的欧式距離来判断,距离越近数据点可以认为越“相似”。当然也可以用,这跟所涉及的具体问题有关

     层次聚类有哪些算法,是一种很直观嘚算法顾名思义就是要一层一层地进行聚类有哪些算法,可以从下而上地把小的cluster合并聚集也可以从上而下地将大的cluster进行分割。似乎一般用得比较多的是从下而上地聚集因此这里我就只介绍这一种。

      所谓从下而上地合并cluster具体而言,就是每次找到距离最短的两个cluster然后進行合并成一个大的cluster,直到全部合并为一个cluster整个过程就是建立一个树结构,类似于下图

      那么,如何判断两个cluster之间的距离呢一开始每個数据点独自作为一个类,它们的距离就是这两个点之间的距离而对于包含不止一个数据点的cluster,就可以选择多种方法了最常用的,就昰average-linkage即计算两个cluster各自数据点的两两距离的平均值。类似的还有single-linkage/complete-linkage选择两个cluster中距离最短/最长的一对数据点的距离作为类的距离。个人经验complete-linkage基夲没用single-linkage通过关注局域连接,可以得到一些形状奇特的cluster但是因为太过极端,所以效果也不是太好

      层次聚类有哪些算法最大的优点,就昰它一次性地得到了整个聚类有哪些算法的过程只要得到了上面那样的聚类有哪些算法树,想要分多少个cluster都可以直接根据树结构来得到結果改变cluster数目不需要再次计算数据点的归属。层次聚类有哪些算法的缺点是计算量比较大因为要每次都要计算多个cluster内所有数据点的两兩距离。另外由于层次聚类有哪些算法使用的是贪心算法,得到的显然只是局域最优不一定就是全局最优,这可以通过加入随机效应解决这就是另外的问题了。

      对样品组1使用average-linkage选择聚类有哪些算法数目为4,可以得到下面的结果右上方的一些异常点被独立地分为一类,而其余的数据点的分类基本符合我们的预期

      如果选择聚类有哪些算法数目为5,则是下面的结果其中一个大的cluster被分割,但没有出现均勻分割的情况(比如K-means)只有少量的数据点被分离,大体的分类还是比较正确的因此这个算法可以处理大小差别比较大的聚类有哪些算法问题,对cluster size不太敏感

      如何确定应该取多少个cluster?这是聚类有哪些算法里面的一个非常重要的问题对于层次聚类有哪些算法,可以根据聚類有哪些算法过程中每次合并的两个cluster的距离来作大概判断,如下图因为总共有2000个数据点,每次合并两个cluster所以总共要做2000次合并。从图Φ可以看到在后期合并的两个cluster的距离会有一个陡增假如数据的分类是十分显然的,就是应该被分为K个大的clusterK个cluster之间有明显的间隙。那么洳果合并的两个小cluster同属于一个目标cluster那么它们的距离就不会太大。但当合并出来K个目标cluster后再进行合并,就是在这K个cluster间进行合并了这样匼并的cluster的距离就会有一个非常明显的突变。当然这是十分理想的情况,现实情况下突变没有这么明显我们只能根据下图做个大致的估計。

      总体而言像average-linkage这样的算法还是比较稳定的,可以大致地判断聚类有哪些算法数目聚类有哪些算法效果也不错,在数据量比较小的时候可以使用

      K-means是最为常用的聚类有哪些算法方法之一,尽管它有着很多不足但是它有着一个很关键的优点:快!K-means的计算复杂度只有O(tkn),t是迭代次数k是设定的聚类有哪些算法数目,而n是数据量相比起很多其它算法,K-means算是比较高效的

其中就是第i个cluster的中心。上式就是要求每個数据点要与它们所属cluster的中心尽量接近

      为了得到每个cluster的中心,K-means迭代地进行两步操作首先随机地给出k个中心的位置,然后把每个数据点歸类到离它最近的中心这样我们就构造了k个cluster。但是这k个中心的位置显然是不正确的,所以要把中心转移到得到的cluster内部的数据点的平均位置实际上也就是计算,在每个数据点的归类确定的情况下上面函数取极值的位置,然后再次构造新的k个cluster这个过程中,中心点的位置不断地改变构造出来的cluster的也在变化(动画请看)。通过多次的迭代这k个中心最终会收敛并不再移动。

      实际应用里人们指出了很多K-means嘚不足。比如需要用户事先给出聚类有哪些算法数目k而这个往往是很难判断的;又如K-means得到的是局域最优,跟初始给定的中心值有关所鉯往往要尝试多个初始值;总是倾向于得到大小接近的凸型cluster等等。

      K-means算法相比起上面提到的层次聚类有哪些算法还有一个很大的不同,那僦是它需要数据点的坐标因为它必须要求取平均,而层次聚类有哪些算法实际上并不需要坐标数据只需要知道数据点之间的距离而已。这也就是说K-means只适用于使用欧氏距离来计算数据点相似性的情况因为如果采用非欧距离,那么也不能通过简单的平均来得到cluster中心

       取k=3,K-means對样品组1聚类有哪些算法得到下面两张图为什么是两张图呢?正如前面所说K-means的聚类有哪些算法结果跟初始中心选择有关,而不是所以嘚初始值都能保证聚类有哪些算法成功的下面第二张就是失败的例子。另外由于K-means总倾向于得到接近大小的cluster所以可以看到两个小的cluster对大cluster嘚“入侵”。

      从上面的结果可以看出K-means的聚类有哪些算法效果确实不是很好。用户如果选择了不正确的聚类有哪些算法数目会使得本应哃一个cluster的数据被判定为属于两个大的类别,这是我们不想看到的因为需要数据点的坐标,这个方法的适用性也受到限制但是效率是它嘚一个优势,在数据量大或者对聚类有哪些算法结果要求不是太高的情况下可以采用K-means算法来计算,也可以在实验初期用来做测试看看数據集的大致情况

聚类有哪些算法分析是一种重要嘚人类行为早在孩提时代,一个人就通过不断改进下意识中的聚类有哪些算法模式来学会如何区分猫狗、动物植物目前在许多领域都嘚到了广泛的研究和成功的应用,如用于模式识别、数据分析、图像处理、市场研究、客户分割、Web文档分类等[1]
 聚类有哪些算法就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大同时不在同一个簇中的数據对象的差异性也尽可能地大。即聚类有哪些算法后同一类的数据尽可能聚集到一起不同数据尽量分离。
 聚类有哪些算法技术[2]正在蓬葧发展对此有贡献的研究领域包括数据挖掘、统计学、机器学习、空间数据库技术、生物学以及市场营销等。各种聚类有哪些算法方法吔被不断提出和改进而不同的方法适合于不同类型的数据,因此对各种聚类有哪些算法方法、聚类有哪些算法效果的比较成为值得研究嘚课题

1 聚类有哪些算法算法的分类  目前,有大量的聚类有哪些算法算法[3]而对于具体应用,聚类有哪些算法算法的选择取决于数据的類型、聚类有哪些算法的目的如果聚类有哪些算法分析被用作描述或探查的工具,可以对同样的数据尝试多种算法以发现数据可能揭礻的结果。


 主要的聚类有哪些算法算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法[4-6]
 每一类中都存在着得到广泛应用的算法,例如:划分方法中的k-means[7]聚类有哪些算法算法、层次方法中的凝聚型层次聚类有哪些算法算法[8]、基于模型方法中的神经网络[9]聚类有哪些算法算法等
 目前,聚类有哪些算法问题的研究不仅仅局限于上述的硬聚类有哪些算法,即每┅个数据只能被归为一类模糊聚类有哪些算法[10]也是聚类有哪些算法分析中研究较为广泛的一个分支。模糊聚类有哪些算法通过隶 属函数來确定每个数据隶属于各个簇的程度而不是将一个数据对象硬性地归类到某一簇中。目前已有很多关于模糊聚类有哪些算法的算法被提絀如著名的FCM算法等。
 本文主要对k-means聚类有哪些算法算法、凝聚型层次聚类有哪些算法算法、神经网络聚类有哪些算法算法之SOM,以及模糊聚類有哪些算法的FCM算法通过通用测试数据集进行聚类有哪些算法效果的比较和分析

本文将从简单高效的 K 均值聚类有哪些算法开始依次介绍均值漂移聚类有哪些算法、基于密度的聚类有哪些算法、利用高斯混合和较大期望方法聚类有哪些算法、层次聚類有哪些算法和适用于结构化数据的图团体检测。我们不仅会分析基本的实现概念同时还会给出每种算法的优缺点以明确实际的应用场景。

聚类有哪些算法是一种包括数据点分组的机器学习技术给定一组数据点,我们可以用聚类有哪些算法算法将每个数据点分到特定的組中理论上,属于同一组的数据点应该有相似的属性和/或特征而属于不同组的数据点应该有非常不同的属性和/或特征。聚类有哪些算法是一种无监督学习的方法是一种在许多领域常用的统计数据分析技术。

另一方面K-Means 有一些缺点。首先你必须选择有多少组/类。这并鈈总是仔细的并且理想情况下,我们希望聚类有哪些算法算法能够帮我们解决分多少类的问题因为它的目的是从数据中获得一些见解。K-means 也从随机选择的聚类有哪些算法中心开始所以它可能在不同的算法中产生不同的聚类有哪些算法结果。因此结果可能不可重复并缺乏一致性。其他聚类有哪些算法方法更加一致

K-Medians 是与 K-Means 有关的另一个聚类有哪些算法算法,除了不是用均值而是用组的中值向量来重新计算組中心这种方法对异常值不敏感(因为使用中值),但对于较大的数据集要慢得多因为在计算中值向量时,每次迭代都需要进行排序

均值漂移聚类有哪些算法是基于滑动窗口的算法,它试图找到数据点的密集区域这是一个基于质心的算法,这意味着它的目标是定位烸个组/类的中心点通过将中心点的候选点更新为滑动窗口内点的均值来完成。然后在后处理阶段对这些候选窗口进行过滤以消除近似偅复,形成最终的中心点集及其相应的组请看下面的图例。

均值漂移聚类有哪些算法的整个过程

与 K-means 聚类有哪些算法相比这种方法不需偠选择簇数量,因为均值漂移自动发现这一点这是一个巨大的优势。聚类有哪些算法中心朝较大点密度聚集的事实也是非常令人满意的因为理解和适应自然数据驱动的意义是非常直观的。它的缺点是窗口大小/半径「r」的选择可能是不重要的

基于密度的聚类有哪些算法方法(DBSCAN)

DBSCAN 是一种基于密度的聚类有哪些算法算法,它类似于均值漂移但具有一些显著的优点。请看下面的另一个有趣的图形让我们开始吧!

  • DBSCAN 从一个没有被访问过的任意起始数据点开始。这个点的邻域是用距离 ε(ε 距离内的所有点都是邻域点)提取的。

  • 如果在这个邻域內有足够数量的点(根据 minPoints)则聚类有哪些算法过程开始,并且当前数据点成为新簇的第一个点否则,该点将会被标记为噪声(稍后这個噪声点可能仍会成为聚类有哪些算法的一部分)在这两种情况下,该点都被标记为「已访问」

  • 对于新簇中的第一个点,其 ε 距离邻域内的点也成为该簇的一部分这个使所有 ε 邻域内的点都属于同一个簇的过程将对所有刚刚添加到簇中的新点进行重复。

  • 重复步骤 2 和 3矗到簇中所有的点都被确定,即簇的 ε 邻域内的所有点都被访问和标记过

  • 一旦我们完成了当前的簇,一个新的未访问点将被检索和处理导致发现另一个簇或噪声。重复这个过程直到所有的点被标记为已访问由于所有点都已经被访问,所以每个点都属于某个簇或噪声


DBSCAN 與其他聚类有哪些算法算法相比有很多优点。首先它根本不需要固定数量的簇。它也会将异常值识别为噪声而不像均值漂移,即使数據点非常不同也会简单地将它们分入簇中。另外它能够很好地找到任意大小和任意形状的簇。

DBSCAN 的主要缺点是当簇的密度不同时它的表现不如其他聚类有哪些算法算法。这是因为当密度变化时用于识别邻域点的距离阈值 ε 和 minPoints 的设置将会随着簇而变化。这个缺点也会在非常高维度的数据中出现因为距离阈值 ε 再次变得难以估计。

用高斯混合模型(GMM)的较大期望(EM)聚类有哪些算法

K-Means 的一个主要缺点是它對于聚类有哪些算法中心均值的简单使用通过下面的图,我们可以明白为什么这不是较佳方法在左侧,可以非常清楚的看到有两个具囿不同半径的圆形簇以相同的均值作为中心。K-Means 不能处理这种情况因为这些簇的均值是非常接近的。K-Means 在簇不是圆形的情况下也失败了哃样是由于使用均值作为聚类有哪些算法中心。

高斯混合模型(GMMs)比 K-Means 给了我们更多的灵活性对于 GMMs,我们假设数据点是高斯分布的;相对於使用均值来假设它们是圆形的这是一个限制较少的假设。这样我们有两个参数来描述簇的形状:均值和标准差!以二维为例,这意菋着这些簇可以采取任何类型的椭圆形(因为我们在 x 和 y 方向都有标准差)。因此每个高斯分布被分配给单个簇。

为了找到每个簇的高斯参数(例如均值和标准差)我们将用一个叫做较大期望(EM)的优化算法。请看下面的图表这是一个高斯适合于簇的例子。然后我们鈳以使用 GMMs 继续进行较大期望聚类有哪些算法的过程

  • 我们首先选择簇的数量(如 K-Means 所做的),并随机初始化每个簇的高斯分布参数也可以通过快速查看数据来尝试为初始参数提供一个好的猜测。但是请注意正如上图所看到的,这不是 100% 必要的因为高斯开始时我们很穷,但昰很快就得到了优化

  • 给定每个簇的高斯分布,计算每个数据点属于一个特定簇的概率一个点越靠近高斯的中心,它就越可能属于该簇这应该是很直观的,因为对于高斯分布我们假设大部分数据更靠近簇的中心

  • 基于这些概率,我们计算一组新的高斯分布参数使得簇内嘚数据点的概率较大化我们使用数据点位置的加权和来计算这些新参数,其中权重是数据点属于该特定簇的概率为了用可视化的方式解释它,我们可以看一下上面的图特别是黄色的簇,我们以它来作为例子分布在第一次迭代时随即开始,但是我们可以看到大部分的黃点都在分布的右侧当我们计算一个概率加权和时,即使中心附近有一些点但它们大部分都在右侧。因此分布的均值自然会接近这些点。我们也可以看到大部分的点分布在「从右上到左下」因此改变标准差来创建更适合这些点的椭圆,以便较大化概率加权和

  • 重复步骤 2 和 3 直到收敛,其中分布在迭代中的变化不大


使用 GMMs 有两个关键的优势。首先GMMs 比 K-Means 在簇协方差方面更灵活;因为标准差参数,簇可以呈現任何椭圆形状而不是被限制为圆形。K-Means 实际上是 GMM 的一个特殊情况这种情况下每个簇的协方差在所有维度都接近 0。第二因为 GMMs 使用概率,所以每个数据点可以有很多簇因此如果一个数据点在两个重叠的簇的中间,我们可以简单地通过说它百分之 X 属于类 1百分之 Y 属于类 2 来萣义它的类。即 GMMs 支持混合资格

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

  • 我们首先将每个数据点视为一个单一的簇即如果我们的数据集中有 X 个数据点,那么我们就有 X 个簇然后,我们选择一个测量两个簇之间距离的距离度量标准作为例子,我们将用 average linkage它将两个簇之间的距离定义为第一个簇中的数据点與第二个簇中的数据点之间的平均距离。

  • 在每次迭代中我们将两个簇合并成一个。这两个要合并的簇应具有最小的 average linkage即根据我们选择的距离度量标准,这两个簇之间的距离最小因此是最相似的,应该合并在一起

  • 重复步骤 2 直到我们到达树根,即我们只有一个包含所有数據点的簇这样我们只需要选择何时停止合并簇,即何时停止构建树来选择最终需要多少个簇!


层次聚类有哪些算法不需要我们指定簇嘚数量,我们甚至可以选择哪个数量的簇看起来较好因为我们正在构建一棵树。另外该算法对于距离度量标准的选择并不敏感;他们嘟同样表现很好,而对于其他聚类有哪些算法算法距离度量标准的选择是至关重要的。层次聚类有哪些算法方法的一个特别好的例子是當基础数据具有层次结构并且你想要恢复层次时;其他聚类有哪些算法算法不能做到这一点。与 K-Means 和 GMM 的线性复杂度不同层次聚类有哪些算法的这些优点是以较低的效率为代价的,因为它具有 O(n3) 的时间复杂度

当我们的数据可以被表示为一个网络或图(graph)时,我们可以使用图團体检测方法完成聚类有哪些算法在这个算法中,图团体(graph community)通常被定义为一种顶点(vertice)的子集其中的顶点相对于网络的其它部分要連接得更加紧密。

也许最直观的案例就是社交网络其中的顶点表示人,连接顶点的边表示他们是朋友或互粉的用户但是,若要将一个系统建模成一个网络我们就必须要找到一种有效连接各个不同组件的方式。将图论用于聚类有哪些算法的一些创新应用包括:对图像数據的特征提取、分析基因调控网络(gene regulatory networks)等

下面是一个简单的图,展示了最近浏览过的 8 个网站根据他们的维基百科页面中的链接进行了連接。

这些顶点的颜色表示了它们的团体关系大小是根据它们的中心度(centrality)确定的。这些聚类有哪些算法在现实生活中也很有意义其Φ黄色顶点通常是参考/搜索网站,蓝色顶点全部是在线发布网站(文章、微博或代码)

假设我们已经将该网络聚类有哪些算法成了一些團体。我们就可以使用该模块性分数来评估聚类有哪些算法的质量分数更高表示我们将该网络分割成了「准确的(accurate)」团体,而低分则表示我们的聚类有哪些算法更接近随机如下图所示:

模块性可以使用以下公式进行计算:

其中 L 代表网络中边的数量,k_i 和 k_j 是指每个顶点的 degree它可以通过将每一行和每一列的项加起来而得到。两者相乘再除以 2L 表示当该网络是随机分配的时候顶点 i 和 j 之间的预期边数

整体而言,括号中的项表示了该网络的真实结构和随机组合时的预期结构之间的差研究它的值可以发现,当 A_ij = 1 且 ( k_i k_j ) / 2L 很小时其返回的值较高。这意味着当在定点 i 和 j 之间存在一个「非预期」的边时,得到的值更高

通过以上公式可以计算图的模块性,且模块性越高该网络聚类有哪些算法成不同团体的程度就越好。因此通过最优化方法寻找较大模块性就能发现聚类有哪些算法该网络的较佳方法

组合学(combinatorics)告诉我们对于┅个仅有 8 个顶点的网络,就存在 4140 种不同的聚类有哪些算法方式16 个顶点的网络的聚类有哪些算法方式将超过 100 亿种。32 个顶点的网络的可能聚類有哪些算法方式更是将超过 128 septillion(10^21)种;如果你的网络有 80 个顶点那么其可聚类有哪些算法的方式的数量就已经超过了可观测宇宙中的原子數量。

因此我们必须求助于一种启发式的方法,该方法在评估可以产生较高模块性分数的聚类有哪些算法上效果良好而且并不需要尝試每一种可能性。这是一种被称为 Fast-Greedy Modularity-Maximization(快速贪婪模块性较大化)的算法这种算法在一定程度上类似于上面描述的 agglomerative hierarchical clustering algorithm(集聚层次聚类有哪些算法算法)。只是 Mod-Max 并不根据距离(distance)来融合团体而是根据模块性的改变来对团体进行融合。

  • 首先初始分配每个顶点到其自己的团体然后計算整个网络的模块性 M。

  • 第 1 步要求每个团体对(community pair)至少被一条单边链接如果有两个团体融合到了一起,该算法就计算由此造成的模块性妀变 ΔM

  • 第 2 步是取 ΔM 出现了较大增长的团体对,然后融合然后为这个聚类有哪些算法计算新的模块性 M,并记录下来

  • 重复第 1 步和 第 2 步——每一次都融合团体对,这样最后得到 ΔM 的较大增益然后记录新的聚类有哪些算法模式及其相应的模块性分数 M。

  • 当所有的顶点都被分组荿了一个巨型聚类有哪些算法时就可以停止了。然后该算法会检查这个过程中的记录然后找到其中返回了较高 M 值的聚类有哪些算法模式。这就是返回的团体结构


团体检测(community detection)是现在图论中一个热门的研究领域,它的局限性主要体现在会忽略一些小的集群且只适用于結构化的图模型。但这一类算法在典型的结构化数据中和现实网状数据都有非常好的性能

以上就是数据科学家应该知道的 6 大聚类有哪些算法算法!我们将以展示各类算法的可视化效果结束本文!

我要回帖

更多关于 聚类有哪些算法 的文章

 

随机推荐