聚类算法分类及如何选择某类方法
聚类算法分类:(1)划分聚类算法:也称为基于距离的聚类算法,此类算法中,簇的数量是随机选择的或最初给定的。属于这一类的算法有K-Meansl,PAM,CLARANSI等。
K-means聚类算法的不足之处在于它要多次扫描数据库,此外,它只能找出球形的类,而不能发现任意形状的类。还有,初始质心K的选择对聚类结果有较大的影响,该算法对噪声很敏感。
划分方法具有线性复杂度,聚类的效率高的优点。然而,由于它要求输入数字k确定结果簇的个数,并且不适合于发现非凸面形状的簇,或者大小差别很大的簇,所以这些启发式聚类方法对在中小规模的数据库中发现球状簇很适用。为了对大规模的数据集进行聚类,以及处理复杂形状的聚类,基于划分的方法需要进一步的扩展。
(2)分层聚类算法:它们将对象集划分为不同级别的组,并形成树状结构。要分为不同级别,通常需要最大数量的簇。常见有CURE算法。
层次方法对给定数据对象集合进行层次的分解。根据层次的分解如何形成,层次的方法可以分为凝聚的和分裂的。凝聚的方法,也称为自底向上的方法,一开始将每个对象作为单独的一个组,然后相继地合并相近的对象或组,直到所有的组合并为一个(层次的最上层),或者达到一个终止条件。分裂的方法,也称为自顶向下的方法,一开始将所有的对象置于一个簇中,在迭代的每一步中,一个簇被分裂为更小的簇,直到最终每个对象在单独的一个簇中,或者达到一个终止条件。
(3)基于密度的聚类算法:是以数据集在空间分布上的稠密程度为依据进行聚类,该类算法无需预设簇的数目,只需给定簇的半径,适用于对未知内容的数据集进行聚类。代表性算法包括DBSCAN、DENCLUE和OPTICS。
绝大多数划分方法基于对象之间的距离进行聚类,这样的方法只能发现球状的簇,而在发现任意形状的簇上遇到了困难。随之提出了基于密度的另一类聚类方法,其主要思想是:只要邻近区域的密度(对象或数据点的数目)超过某个阈值,就继续聚类。也就是说,对给定类中的每个数据点,在一个给定范围的区域中必须至少包含某个数目的点。这样的方法可以用来过滤“噪声”孤立点数据,发现任意形状的簇。
对于有大量“噪声”的数据集合,它有良好的聚类特征;对于高维数据集合的任意形状的聚类,它给出了一个基于树的存储结构来管理这些单元,因此比一些有影响的算法(如DBSCAN)速度要快。但是,这个方法要求对密度参数σ和噪声阈值ξ进行仔细的选择,如果选择不当则可能显著地影响聚类结果的质量。
(4)基于网格的聚类算法:STING,DCluster,Wavecluster。
基于网格的方法把对象空间量化为有限数目的单元,形成了一个网格结构。所有的聚类操作都在这个网格结构(即量化的空间)上进行。
STING聚类的质量取决于网格结构的最低层的粒度。如果粒度比较细,处理的代价会显著增加;但是,如果网格结构最低层的力度太粗,将会降低聚类分析的质量;而且,STING在构建一个父亲单元时没有考虑孩子单元和其相邻单元之间的关系,因此,结果簇的形状是isothetic,即所有的聚类边界或者是水平的,或者是竖直的,没有对角的边界。尽管该技术有快速的处理速度,但可能降低簇的质量和精确性。
WaveCluster(ClusteringwithWavelets)采用小波变换聚类,它是一种多分辨率的聚类算法,它首先通过在数据空间上加一个多维网格结构来汇总数据,然后采用一种小波变换来变换原特征空间,在变换后的空间中找到密集区域。它给出的的聚类结果是一组不同分辨率的聚类组,需要应用者根据需求自己确定提取某个聚类结果。
(5)高维数据的聚类算法:CLIOUE,HPStream。
CLIQUE(ClusteringInQUEst)算法综合了基于密度和基于网格的聚类方法,它的中心思想是:首先,给定一个多维数据点的集合,数据点在数据空间中通常不是均衡分布的。CLIQUE区分空间中稀疏的和“拥挤的”区域(或单元),以发现数据集合的全局分布模式。接着,如果一个单元中的包含数据点超过了某个输入模型参数,则该单元是密集的。在CLIQUE中,簇定义为相连的密集单元的最大集合。
CLIQUE算法能自动发现最高维中所存在的密集聚类;它对输入数据元组顺序不敏感;也不需要假设(数据集中存在)任何特定的数据分布;它与输入数据大小呈线性关系;并当数据维数增加时具有较好的可扩展性。但是,在追求方法简单化的同时往往就会降低聚类的准确性。
基于聚类的技术有以下优点:(1)聚类算法属于无监督算法,无需训练集,算法简单快速,时间复杂度较低。(2)对不同的数据类型具有鲁棒性,适用于多种数据集。但是也有局限性:(1)算法一般都需要参数,聚类结果对于输入参数高度敏感。(2)对于初始化阶段的离群点非常敏感,会直接影响到聚类的效果。
几种常用的聚类算法从可伸缩性、适合的数据类型、高维性(处理高维数据的能力)、异常数据的抗干扰度、聚类形状和算法效率6个方面进行了综合性能评价,评价结果如表1所示:
算法名称可伸缩性适合的数据类型高维性异常数据的抗干扰性聚类形状算法效率WaveCluster很高数值型很高较高任意形状很高ROCK很高混合型很高很高任意形状一般BIRCH较高数值型较低较低球形很高CURE较高数值型一般很高任意形状较高K-Prototypes一般混合型较低较低任意形状一般DENCLUE较低数值型较高一般任意形状较高OptiGrid一般数值型较高一般任意形状一般CLIQUE较高数值型较高较高任意形状较低DBSCAN一般数值型较低较高任意形状一般CLARANS较低数值型较低较高球形较低怎么选择聚类算法(1)聚类结果是排他的还是可重叠的为了很好理解这个问题,我们以一个例子进行分析,假设你的聚类问题需要得到二个簇:“喜欢詹姆斯卡梅隆电影的用户”和“不喜欢詹姆斯卡梅隆的用户”,这其实是一个排他的聚类问题,对于一个用户,他要么属于“喜欢”的簇,要么属于不喜欢的簇。但如果你的聚类问题是“喜欢詹姆斯卡梅隆电影的用户”和“喜欢里奥纳多电影的用户”,那么这个聚类问题就是一个可重叠的问题,一个用户他可以既喜欢詹姆斯卡梅隆又喜欢里奥纳多。所以这个问题的核心是,对于一个元素,他是否可以属于聚类结果中的多个簇中,如果是,则是一个可重叠的聚类问题,如果否,那么是一个排他的聚类问题。(2)基于层次还是基于划分其实大部分人想到的聚类问题都是“划分”问题,就是拿到一组对象,按照一定的原则将它们分成不同的组,这是典型的划分聚类问题。但除了基于划分的聚类,还有一种在日常生活中也很常见的类型,就是基于层次的聚类问题,它的聚类结果是将这些对象分等级,在顶层将对象进行大致的分组,随后每一组再被进一步的细分,也许所有路径最终都要到达一个单独实例,这是一种“自顶向下”的层次聚类解决方法,对应的,也有“自底向上”的。其实可以简单的理解,“自顶向下”就是一步步的细化分组,而“自底向上”就是一步步的归并分组。(3)簇数目固定的还是无限制的聚类这个属性很好理解,就是你的聚类问题是在执行聚类算法前已经确定聚类的结果应该得到多少簇,还是根据数据本身的特征,由聚类算法选择合适的簇的数目。(4)基于距离还是基于概率分布模型基于距离的聚类问题应该很好理解,就是将距离近的相似的对象聚在一起。相比起来,基于概率分布模型的,可能不太好理解。一个概率分布模型可以理解是在N维空间的一组点的分布,而它们的分布往往符合一定的特征,比如组成一个特定的形状。基于概率分布模型的聚类问题,就是在一组对象中,找到能符合特定分布模型的点的集合,他们不一定是距离最近的或者最相似的,而是能完美的呈现出概率分布模型所描述的模型。
聚类方法的区别解读:各种聚类分析
k均值聚类法快速高效,特别是大量数据时,准确性高一些,但是需要你自己指定聚类的类别数量
系统聚类法则是系统自己根据数据之间的距离来自动列出类别,所以通过系统聚类法得出一个树状图,至于聚类的类别需要自己根据树状图以及经验来确定
(同上)在聚类分析中,我们常用的聚类方法有快速聚类(迭代聚类)和层次聚类。其中层次聚类容易受到极值的影响,并且计算复杂速度慢不适合大样本聚类;快速聚类虽然速度快,但是其分类指标要求是定距变量,而实际研究中,有很多的定类变量,如性别、学历、职业、重复购买的可能性等多个与研究目的紧密相关的指标无法直接参与运算,而大大限制了它的使用范围
k-means聚类算法的初始点选择不稳定,是随机选取的,这就引起聚类结果的不稳定,本实验中虽是经过多次实验取的平均值,但是具体初始点的选择方法还需进一步研究;层次聚类虽然不需要确定分类数,但是一旦一个分裂或者合并被执行,就不能修正,聚类质量受限制;FCM对初始聚类中心敏感,需要人为确定聚类数,容易陷入局部最优解;SOM与实际大脑处理有很强的理论联系。但是处理时间较长,需要进一步研究使其适应大型数据库。
相关方法说明
聚类分析是一种重要的人类行为,早在孩提时代,一个人就通过不断改进下意识中的聚类模式来学会如何区分猫狗、动物植物。目前在许多领域都得到了广泛的研究和成功的应用,如用于模式识别、数据分析、图像处理、市场研究、客户分割、Web文档分类等[1]。
聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,不同数据尽量分离。
聚类技术[2]正在蓬勃发展,对此有贡献的研究领域包括数据挖掘、统计学、机器学习、空间数据库技术、生物学以及市场营销等。各种聚类方法也被不断提出和改进,而不同的方法适合于不同类型的数据,因此对各种聚类方法、聚类效果的比较成为值得研究的课题。
1聚类算法的分类
目前,有大量的聚类算法[3]。而对于具体应用,聚类算法的选择取决于数据的类型、聚类的目的。如果聚类分析被用作描述或探查的工具,可以对同样的数据尝试多种算法,以发现数据可能揭示的结果。
主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法[4-6]。
每一类中都存在着得到广泛应用的算法,例如:划分方法中的k-means[7]聚类算法、层次方法中的凝聚型层次聚类算法[8]、基于模型方法中的神经网络[9]聚类算法等。
目前,聚类问题的研究不仅仅局限于上述的硬聚类,即每一个数据只能被归为一类,模糊聚类[10]也是聚类分析中研究较为广泛的一个分支。模糊聚类通过隶属函数来确定每个数据隶属于各个簇的程度,而不是将一个数据对象硬性地归类到某一簇中。目前已有很多关于模糊聚类的算法被提出,如著名的FCM算法等。
本文主要对k-means聚类算法、凝聚型层次聚类算法、神经网络聚类算法之SOM,以及模糊聚类的FCM算法通过通用测试数据集进行聚类效果的比较和分析。
2四种常用聚类算法研究
2.1k-means聚类算法
k-means是划分方法中较经典的聚类算法之一。由于该算法的效率高,所以在对大规模数据进行聚类时被广泛应用。目前,许多算法均围绕着该算法进行扩展和改进。
k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。k-means算法的处理过程如下:首先,随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。这个过程不断重复,直到准则函数收敛。通常,采用平方误差准则,其定义如下:
这里E是数据库中所有对象的平方误差的总和,p是空间中的点,mi是簇Ci的平均值[9]。该目标函数使生成的簇尽可能紧凑独立,使用的距离度量是欧几里得距离,当然也可以用其他距离度量。k-means聚类算法的算法流程如下:
输入:包含n个对象的数据库和簇的数目k;
输出:k个簇,使平方误差准则最小。
步骤:
(1)任意选择k个对象作为初始的簇中心;
(2)repeat;
(3)根据簇中对象的平均值,将每个对象(重新)赋予最类似的簇;
(4)更新簇的平均值,即计算每个簇中对象的平均值;
(5)until不再发生变化。
2.2层次聚类算法
根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。
凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。四种广泛采用的簇间距离度量方法如下:
这里给出采用最小距离的凝聚层次聚类算法流程:
(1)将每个对象看作一类,计算两两之间的最小距离;
(2)将距离最小的两个类合并成一个新类;
(3)重新计算新类与所有类之间的距离;
(4)重复(2)、(3),直到所有类最后合并成一类。
2.3SOM聚类算法
SOM神经网络[11]是由芬兰神经网络专家Kohonen教授提出的,该算法假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。
SOM网络包含输入层和输出层。输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。
算法流程:
(1)网络初始化,对输出层每个节点权重赋初值;
(2)将输入样本中随机选取输入向量,找到与输入向量距离最小的权重向量;
(3)定义获胜单元,在获胜单元的邻近区域调整权重使其向输入向量靠拢;
(4)提供新样本、进行训练;
(5)收缩邻域半径、减小学习率、重复,直到小于允许值,输出聚类结果。
2.4FCM聚类算法
1965年美国加州大学柏克莱分校的扎德教授第一次提出了‘集合’的概念。经过十多年的发展,模糊集合理论渐渐被应用到各个实际应用方面。为克服非此即彼的分类缺点,出现了以模糊集合论为数学基础的聚类分析。用模糊数学的方法进行聚类分析,就是模糊聚类分析[12]。
FCM算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法。该聚类算法是传统硬聚类算法的一种改进。
算法流程:
(1)标准化数据矩阵;
(2)建立模糊相似矩阵,初始化隶属矩阵;
(3)算法开始迭代,直到目标函数收敛到极小值;
(4)根据迭代结果,由最后的隶属矩阵确定数据所属的类,显示最后的聚类结果。
2.5softk-means
机器学习中的聚类算法有哪几种
目前,聚类算法被广泛应用于用户画像、广告推荐、新闻推送和图像分割等等。聚类算法是机器学习中一种“数据探索”的分析方法,它帮助我们在大量的数据中探索和发现数据的结构。那么机器学习中的聚类算法有哪几种呢?下面我将为大家一一介绍常见的几种聚类算法,分别是高斯聚类模型、基于密度的聚类算法、凝聚层次聚类和均值漂移算法。
机器学习中的聚类算法有哪几种?
1、高斯聚类模型
事实上,GMM和k-means很像,不过GMM是学习出一些概率密度函数来,简单地说,k-means的结果是每个数据点被assign到其中某一个cluster了,而GMM则给出这些数据点被assign到每个cluster的概率,又称作softassignment。
2、基于密度的聚类算法
基于密度的聚类算法最大的优点在于无需定义类的数量,其次可以识别出局外点和噪声点、并且可以对任意形状的数据进行聚类。DBSCAN同样是基于密度的聚类算法,但其原理却与均值漂移大不相同:首先从没有被遍历的任一点开始,利用邻域距离epsilon来获取周围点;如果邻域内点的数量满足阈值则此点成为核心点并以此开始新一类的聚类;其邻域内的所有点也属于同一类,将所有的邻域内点以epsilon为半径进行步骤二的计算;重复步骤二、三直到变量完所有核心点的邻域点;此类聚类完成,同时又以任意未遍历点开始步骤一到四直到所有数据点都被处理;最终每个数据点都有自己的归属类别或者属于噪声。
3、K均值聚类
这一最著名的聚类算法主要基于数据点之间的均值和与聚类中心的聚类迭代而成。它主要的优点是十分的高效,由于只需要计算数据点与剧类中心的距离,其计算复杂度只有O(n)。其工作原理主要分为以下四步:首先我们需要预先给定聚类的数目同时随机初始化聚类中心。我们可以初略的观察数据并给出较为准确的聚类数目;每一个数据点通过计算与聚类中心的距离了来分类到最邻近的一类中;根据分类结果,利用分类后的数据点重新计算聚类中心;重复步骤二三直到聚类中心不再变化。
4、凝聚层次聚类
层次聚类法主要有自顶向下和自底向上两种方式。其中自底向上的方式,最初将每个点看做是独立的类别,随后通过一步步的凝聚最后形成独立的一大类,并包含所有的数据点。这会形成一个树形结构,并在这一过程中形成聚类。
5、均值漂移算法
这是一种基于滑动窗口的均值算法,用于寻找数据点中密度最大的区域。其目标是找出每一个类的中心点,并通过计算滑窗内点的均值更新滑窗的中心点。最终消除临近重复值的影响并形成中心点,找到其对应的类别。其工作原理主要是以下几点:首先以随机选取的点为圆心r为半径做一个圆形的滑窗。其目标是找出数据点中密度最高点并作为中心;在每个迭代后滑动窗口的中心将为想着较高密度的方向移动;连续移动,直到任何方向的移动都不能增加滑窗中点的数量,此时滑窗收敛;将上述步骤在多个滑窗上进行以覆盖所有的点。当过个滑窗收敛重叠时,其经过的点将会通过其滑窗聚类为一个类。
免费分享一些我整理的人工智能学习资料给大家,包括一些AI常用框架实战视频、图像识别、OpenCV、NLQ、机器学习、pytorch、计算机视觉、深度学习与神经网络等视频、课件源码、国内外知名精华资源、AI热门论文、行业报告等。
为了更好的系统学习AI,推荐大家收藏一份。
下面是部分截图,点击文末名片关注我的公众号【AI技术星球】发送暗号321领取(一定要发暗号321)一、人工智能课程及项目
二、国内外知名精华资源
三、人工智能论文合集
四、人工智能行业报告
学好人工智能,要多看书,多动手,多实践,要想提高自己的水平,一定要学会沉下心来慢慢的系统学习,最终才能有所收获。
点击下方名片,扫码关注【AI技术星球】发送暗号321免费领取文中资料。聚类算法——层次聚类算法
算法描述:
1)N个初始模式样本自成一类,即建立N类:
G1(0),G2(0),…,Gn(0)(G_Group)计算各类之间(即各样本间)的距离(相似性、相关性),得一N*N维距离矩阵。“0”表示初始状态。
2)假设已求得距离矩阵D(n)(n为逐次聚类合并的次数),找出D(n)中的最小元素,将其对应的两类合并为一类。由此建立新的分类:
G1(n+1),G2(n+1),…3)计算合并后新类别之间的距离,得D(n+1)。
4)跳至第二步,重复计算及合并。
结束条件:
取距离阈值T,当D(n)的最小分量超过给定值T时,算法停止。所得即为聚类结果。
或不设阈值T,一直将全部样本聚成一类为止,输出聚类的分级树。