聚类算法大全
- 格式:docx
- 大小:10.67 KB
- 文档页数:4
数据聚类算法
数据聚类算法是一种无监督学习方法,用于将数据集中的对象(如数据点、样本等)按照某种相似性度量方法划分为不同的簇。
聚类算法的目标是使得同一个簇内的数据对象尽可能相似,不同簇之间的数据对象尽可能不同。
以下是一些常见的聚类算法:
1.K-均值聚类:K-均值可能是最知名的聚类算法。
首先选择一些要使用的类/组,并随机初始化它们各自的中心点(质心)。
每个数据点通过计算该点与每个簇中心之间的距离来进行分类,根据最小距离,将该点分类到对应中心点的簇中。
然后根据这些已分类的点,重新计算簇中所有向量的均值,来确定新的中心点。
重复以上步骤来进行一定数量的迭代,或者直到簇中心点在迭代之间变化不大。
K-Means 算法的优势在于它的速度非常快,因为我们所做的只是计算点和簇中心之间的距离。
2.自底向上法:该方法在一开始每个数据对象都是一个簇,计算数据对象之间的距离,每次将距离最近的点合并到同一个簇。
然后计算簇与簇之间的距离,将距离最近的簇合并为一个大簇。
不停地合并,直到合成了一个簇,或者达到某个终止条件为止。
代表算法是AGNES(AGglomerativeNESing)算法。
3.自顶向下法:该方法在一开始所有个体都属于一个簇,然后逐渐细分为更小的簇,直到最终每个数据对象都在不同的簇中,或者达到某个终止条件为止。
代表算法是DIANA(DivisiveANAlysis)算法。
4.密度聚类:基于密度的聚类方法的主要目标是寻找被低密度区域分离的高密度区域。
DBSCAN、OPTICS是其中的代表算法。
聚类算法经典案例聚类算法是一种机器学习技术,它通过将数据分成不同的类别或群集并分配标签来发现数据内在的结构和模式。
下面将介绍几个聚类算法的经典案例。
1. K-Means算法K-Means算法是聚类算法中最常见和最简单的方法之一。
它将数据分成K个类别,并在每个类别中放置一个聚类质心。
接着,算法计算每个数据点到聚类质心的距离,并将其分配给最近的质心,形成一个聚类。
最后,算法更新每个聚类的质心,并重新分配每个数据点,直到收敛为止。
经典案例:在市场细分中,K-Means算法可以用来将消费者分成不同的群体。
例如,可以使用购买历史和口味偏好来将消费者分成健康食品用户、零食用户和高端餐饮用户等。
2. 层次聚类算法层次聚类算法也是一种常见的聚类算法,它将数据分成不同的类别,并使用树状结构来表示聚类过程。
层次聚类算法可以分为凝聚式和分裂式两种。
经典案例:在癌症治疗中,层次聚类算法可以用来识别患者是否属于某种分子亚型,以确定他们的最佳治疗方案。
3. DBSCAN算法DBSCAN算法是一种密度聚类算法,它将数据分成具有相似密度的群集。
该算法定义了两个核心参数:半径和密度。
接着,算法将密度高于某个阈值的点分配给一个聚类,并且任何不在聚类中的点都被视为噪声。
经典案例:在地理空间数据分析中,DBSCAN算法可以用来识别热点区域或者犯罪高发区,同时排除低密度的区域。
综上所述,聚类算法广泛用于分类、市场细分、癌症治疗、地理空间数据分析等领域。
不同的聚类算法可以应用于不同的问题,选择适当的算法可以帮助得出准确的结论。
7种常用的聚类方法K均值聚类是一种基于距离的聚类方法,它将数据点分成K个簇,每个簇都有一个代表性的点,称为质心。
该方法的优点是简单易懂,计算速度快,适用于大规模数据集。
然而,K均值聚类对初始质心的选择敏感,容易陷入局部最优解。
层次聚类是一种树状聚类方法,它通过不断合并最相似的簇来构建聚类树。
这种方法不需要事先指定聚类个数,且对初始值不敏感,但计算复杂度较高,不适用于大规模数据集。
密度聚类是一种基于密度的聚类方法,它将高密度区域划分为簇,并能够发现任意形状的簇。
该方法对噪声和离群点具有较好的鲁棒性,但对参数的选择较为敏感。
模型聚类是一种基于概率模型的聚类方法,它假设数据是由若干个概率分布生成的,并通过模型拟合来进行聚类。
这种方法可以很好地处理数据中的噪声和缺失值,但对数据分布的假设较为苛刻。
谱聚类是一种基于图论的聚类方法,它将数据点视为图中的节点,通过图的拉普拉斯矩阵来进行聚类。
谱聚类能够发现任意形状的簇,且对参数的选择较为鲁棒,但计算复杂度较高,不适用于大规模数据集。
基于网格的聚类是一种将数据空间划分为网格单元,然后在每个单元中进行聚类的方法。
这种方法适用于高维数据和大规模数据集,但对网格大小的选择较为敏感。
分布式聚类是一种将聚类过程分布在多台计算机上进行的方法,它能够处理大规模数据集,并能够并行计算,但需要考虑数据通信和同步的开销。
综上所述,不同的聚类方法适用于不同的数据特点和应用场景。
在选择聚类方法时,需要综合考虑数据规模、数据特征、计算资源等因素,以及对聚类结果的要求。
希望本文介绍的7种常用聚类方法能够为读者在实际应用中的选择提供一定的参考和帮助。
常见的六大聚类算法六大常见的聚类算法包括K-means聚类算法、层次聚类算法、DBSCAN 算法、OPTICS算法、谱聚类算法和高斯混合模型聚类算法。
1. K-means聚类算法:K-means聚类算法是一种基于距离的聚类算法,它通过最小化数据点与聚类中心之间的欧氏距离来划分数据点。
算法的步骤如下:a.随机选择K个聚类中心。
b.将每个数据点分配到距离最近的聚类中心。
c.更新聚类中心为选定聚类的平均值。
d.重复步骤b和c直到聚类中心不再改变或达到最大迭代次数。
2.层次聚类算法:层次聚类算法是一种自底向上或自顶向下递归地将数据划分成不同的聚类的方法。
它通过计算数据点之间的距离或相似度来判断它们是否应该被合并到同一个聚类中。
算法的步骤如下:a.初始化每个数据点为一个单独的聚类。
b.计算两个最近的聚类之间的距离或相似度。
c.合并两个最近的聚类,形成一个新的聚类。
d.重复步骤b和c直到所有数据点都被合并到一个聚类中。
3.DBSCAN算法:DBSCAN(Density-Based Spatial Clustering of Applicationswith Noise)算法是一种基于密度的聚类算法,它通过寻找具有足够密度的数据点来划分聚类。
算法的步骤如下:a.随机选择一个未被访问的数据点。
b.如果该数据点的密度达到预设的阈值,则将其归为一个聚类,同时将其相邻且密度达到阈值的数据点添加到聚类中。
c.重复步骤a和b直到所有数据点都被访问。
4.OPTICS算法:OPTICS(Ordering Points To Identify the Clustering Structure)算法是一种基于密度的聚类算法,它通过将数据点按照密度排序来划分聚类。
算法的步骤如下:a.计算每个数据点的可达距离和局部可达密度。
b.根据可达距离和局部可达密度排序所有数据点。
c.根据可达距离和阈值划分聚类。
d.重复步骤b和c直到所有数据点都被访问。
1.聚类定义“聚类是把相似的对象通过静态分类的方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都有一些相似的属性”——wikipedia“聚类分析指将物理或抽象对象的集合分组成为由类似的对象组成的多个类的分析过程。
它是一种重要的人类行为。
聚类是将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。
”——百度百科说白了,聚类(clustering)是完全可以按字面意思来理解的——将相同、相似、相近、相关的对象实例聚成一类的过程。
简单理解,如果一个数据集合包含N个实例,根据某种准则可以将这N 个实例划分为m个类别,每个类别中的实例都是相关的,而不同类别之间是区别的也就是不相关的,这个过程就叫聚类了。
2.聚类过程:1) 数据准备:包括特征标准化和降维.2) 特征选择:从最初的特征中选择最有效的特征,并将其存储于向量中.3) 特征提取:通过对所选择的特征进行转换形成新的突出特征.4) 聚类(或分组):首先选择合适特征类型的某种距离函数(或构造新的距离函数)进行接近程度的度量;而后执行聚类或分组.5) 聚类结果评估:是指对聚类结果进行评估.评估主要有3 种:外部有效性评估、内部有效性评估和相关性测试评估.3聚类算法的类别没有任何一种聚类技术(聚类算法)可以普遍适用于揭示各种多维数据集所呈现出来的多种多样的结构,根据数据在聚类中的积聚规则以及应用这些规则的方法,有多种聚类算法.聚类算法有多种分类方法将聚类算法大致分成层次化聚类算法、划分式聚类算法、基于密度和网格的聚类算法和其他聚类算法,如图1 所示的4 个类别.3.聚类算法基于层次聚类算法:基于划分聚类算法(partition clustering)基于密度聚类算法:基于网格的聚类算法:STING :利用网格单元保存数据统计信息,从而实现多分辨率的聚类WaveCluster:在聚类分析中引入了小波变换的原理,主要应用于信号处理领域。
聚类8种方法聚类是一种无监督学习方法,它将数据集中的对象分成不同的组或簇,使得同一组内的对象相似度较高,而不同组之间的对象相似度较低。
聚类方法可以应用于各种领域,如数据挖掘、图像处理、生物信息学等。
本文将介绍8种常见的聚类方法。
1. K均值聚类K均值聚类是最常见的聚类方法之一。
它将数据集中的对象分成K 个簇,每个簇的中心点称为质心。
算法的过程是先随机选择K个质心,然后将每个对象分配到最近的质心所在的簇中,接着重新计算每个簇的质心,重复以上步骤直到质心不再改变或达到预设的迭代次数。
2. 层次聚类层次聚类是一种自下而上或自上而下的聚类方法。
它将数据集中的对象逐步合并成越来越大的簇,直到所有对象都被合并为一个簇或达到预设的簇数。
层次聚类有两种方法:凝聚聚类和分裂聚类。
凝聚聚类是自下而上的方法,它从每个对象开始,逐步合并成越来越大的簇。
分裂聚类是自上而下的方法,它从所有对象开始,逐步分裂成越来越小的簇。
3. DBSCAN聚类DBSCAN聚类是一种基于密度的聚类方法。
它将数据集中的对象分为核心点、边界点和噪声点三类。
核心点是在半径为ε内有至少MinPts个对象的点,边界点是在半径为ε内有少于MinPts个对象的点,但它是核心点的邻居,噪声点是既不是核心点也不是边界点的点。
DBSCAN聚类的过程是从任意一个未被访问的核心点开始,找到所有密度可达的点,将它们合并成一个簇,直到所有核心点都被访问。
4. 密度聚类密度聚类是一种基于密度的聚类方法,它将数据集中的对象分为不同的簇,每个簇的密度较高,而不同簇之间的密度较低。
密度聚类的过程是从任意一个未被访问的点开始,找到所有密度可达的点,将它们合并成一个簇,直到所有点都被访问。
5. 谱聚类谱聚类是一种基于图论的聚类方法。
它将数据集中的对象看作是图中的节点,将它们之间的相似度看作是边的权重。
谱聚类的过程是将相似度矩阵转换成拉普拉斯矩阵,然后对拉普拉斯矩阵进行特征值分解,得到特征向量,将它们作为新的特征空间,再用K均值聚类或其他聚类方法进行聚类。
典型的聚类算法包括K-Means算法、层次聚类算法、DBSCAN算法、OPTICS算法、基于密度的聚类算法、谱聚类算法、BIRCH算法、CLARA算法、PAM算法和CURE算法等。
其中,K-Means算法是一种基于距离的聚类算法,它将数据集划分成k个簇,每个簇的中心点称为质心,然后根据数据点与质心之间的距离将数据点划分到不同的簇中。
该算法的优点是计算速度快、易于实现和解释,但是它对于初始质心的选择较为敏感,且对于非凸数据集效果不佳。
层次聚类算法也是一种基于距离的聚类算法,它将数据集划分成一棵树形结构,每个节点代表一个簇,树的根节点代表整个数据集,叶子节点代表单个数据点。
该算法能够发现任意形状的簇,但是计算复杂度较高。
DBSCAN算法是一种基于密度的聚类算法,它将数据集划分成若干个密度相似的簇,每个簇由密度相连的数据点组成。
该算法能够发现任意形状的簇,并且能够处理噪声点和异常点。
OPTICS算法是一种基于距离和密度的聚类算法,它旨在发现数据集中的有序簇。
该算法首先根据距离对数据点进行排序,然后根据密度将数据点划分成簇。
该算法能够发现任意形状的簇,并且能够处理噪声点和异常点。
谱聚类算法是一种基于图论的聚类算法,它将数据集视为一个图,每个数据点是一个节点,边上的权重表示数据点之间的相似度。
该算法通过求解图的Laplacian矩阵的特征向量将节点划分为不同的簇。
该算法能够发现任意形状的簇,但是计算复杂度较高。
BIRCH算法是一种基于聚类的聚类算法,它通过构建一个聚类特征树来对数据进行聚类。
该算法能够处理大规模数据集,并且能够发现任意形状的簇。
CLARA算法是一种基于子抽样的聚类算法,它从数据集中随机抽取若干个子集,然后在每个子集上分别进行聚类,并选择最优的聚类结果作为最终结果。
该算法能够处理大规模数据集,并且能够发现任意形状的簇。
PAM算法是一种基于质心的聚类算法,它将数据点划分成k个簇,每个簇的中心点称为质心。
聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。
即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。
主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法。
下面主要对k-means聚类算法、凝聚型层次聚类算法、神经网络聚类算法之SOM,以及模糊聚类的FCM算法通过通用测试数据集进行聚类效果的比较和分析。
k-means聚类算法k-means是划分方法中较经典的聚类算法之一。
由于该算法的效率高,所以在对大规模数据进行聚类时被广泛应用。
目前,许多算法均围绕着该算法进行扩展和改进。
k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。
k-means算法的处理过程如下:首先,随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。
这个过程不断重复,直到准则函数收敛。
通常,采用平方误差准则,其定义如下:E=\sum_{i=1}^{k}\sum_{p\in C_i}\left\|p-m_i\right\|^2这里E是数据中所有对象的平方误差的总和,p是空间中的点,$m_i$是簇$C_i$的平均值[9]。
该目标函数使生成的簇尽可能紧凑独立,使用的距离度量是欧几里得距离,当然也可以用其他距离度量。
算法流程:输入:包含n个对象的数据和簇的数目k;输出:n个对象到k个簇,使平方误差准则最小。
步骤:(1) 任意选择k个对象作为初始的簇中心;(2) 根据簇中对象的平均值,将每个对象(重新)赋予最类似的簇;(3) 更新簇的平均值,即计算每个簇中对象的平均值;(4) 重复步骤(2)、(3)直到簇中心不再变化;层次聚类算法根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。
一、层次聚类1、层次聚类的原理及分类1层次法Hierarchical methods先计算样本之间的距离;每次将距离最近的点合并到同一个类;然后,再计算类与类之间的距离,将距离最近的类合并为一个大类;不停的合并,直到合成了一个类;其中类与类的距离的计算方法有:最短距离法,最长距离法,中间距离法,类平均法等;比如最短距离法,将类与类的距离定义为类与类之间样本的最短距离;层次聚类算法根据层次分解的顺序分为:自下底向上和自上向下,即凝聚的层次聚类算法和分裂的层次聚类算法agglomerative和divisive,也可以理解为自下而上法bottom-up和自上而下法top-down;自下而上法就是一开始每个个体object都是一个类,然后根据linkage寻找同类,最后形成一个“类”;自上而下法就是反过来,一开始所有个体都属于一个“类”,然后根据linkage排除异己,最后每个个体都成为一个“类”;这两种路方法没有孰优孰劣之分,只是在实际应用的时候要根据数据特点以及你想要的“类”的个数,来考虑是自上而下更快还是自下而上更快;至于根据Linkage判断“类”的方法就是最短距离法、最长距离法、中间距离法、类平均法等等其中类平均法往往被认为是最常用也最好用的方法,一方面因为其良好的单调性,另一方面因为其空间扩张/浓缩的程度适中;为弥补分解与合并的不足,层次合并经常要与其它聚类方法相结合,如循环定位;2Hierarchical methods中比较新的算法有BIRCHBalanced Iterative Reducing and Clustering Using Hierarchies利用层次方法的平衡迭代规约和聚类主要是在数据量很大的时候使用,而且数据类型是numerical;首先利用树的结构对对象集进行划分,然后再利用其它聚类方法对这些聚类进行优化;ROCKA Hierarchical Clustering Algorithm for Categorical Attributes主要用在categorical 的数据类型上;ChameleonA Hierarchical Clustering Algorithm Using Dynamic Modeling里用到的linkage是kNNk-nearest-neighbor算法,并以此构建一个graph,Chameleon的聚类效果被认为非常强大,比BIRCH好用,但运算复杂度很高,On^2;2、层次聚类的流程凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足;绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同;这里给出采用最小距离的凝聚层次聚类算法流程:1 将每个对象看作一类,计算两两之间的最小距离;2 将距离最小的两个类合并成一个新类;3 重新计算新类与所有类之间的距离;4 重复2、3,直到所有类最后合并成一类;聚类的效果如下图,黑色是噪音点:另外我们可以看出凝聚的层次聚类并没有类似基本K均值的全局目标函数,没有局部极小问题或是很难选择初始点的问题;合并的操作往往是最终的,一旦合并两个簇之后就不会撤销;当然其计算存储的代价是昂贵的;3、层次聚类的优缺点优点:1,距离和规则的相似度容易定义,限制少;2,不需要预先制定聚类数;3,可以发现类的层次关系;4,可以聚类成其它形状缺点:1,计算复杂度太高;2,奇异值也能产生很大影响;3,算法很可能聚类成链状r语言中使用hclustd, method = "complete", members=NULL:进行层次聚类;d为距离矩阵;method 表示类的合并方法,single最短距离法,complete最长距离法,median中间距离法,mcquitty相似法,average类平均法,centroid重心法,ward离差平方和法;members为NULL或d长度的矢量;二、划分聚类法k-means基于划分的方法Partition-based methods:其原理简单来说就是,想象你有一堆散点需要聚类,想要的聚类效果就是“类内的点都足够近,类间的点都足够远”;首先你要确定这堆散点最后聚成几类,然后挑选几个点作为初始中心点,再然后依据预先定好的启发式算法heuristic algorithms给数据点做迭代重置iterative relocation,直到最后到达“类内的点都足够近,类间的点都足够远”的目标效果;Partition-based methods聚类多适用于中等体量的数据集,但我们也不知道“中等”到底有多“中”,所以不妨理解成,数据集越大,越有可能陷入局部最小;1、Kmeans算法的原理k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低;k-means算法的处理过程如下:首先,随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心,即选择K个初始质心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值; 这个过程不断重复,直到准则函数收敛,直到质心不发生明显的变化;通常,采用平方误差准则,误差的平方和SSE作为全局的目标函数,即最小化每个点到最近质心的欧几里得距离的平方和;此时,簇的质心就是该簇内所有数据点的平均值;选择K个点作为初始质心repeat将每个点指派到最近的质心,形成K个簇重新计算每个簇的质心until簇不发生变化或达到最大迭代次数时间复杂度:OtKmn,其中,t为迭代次数,K为簇的数目,m为记录数,n为维数空间复杂度:Om+Kn,其中,K为簇的数目,m为记录数,n为维数K-Means 算法的详细过程从上图中,我们可以看到,A, B, C, D, E 是五个在图中点;而灰色的点是我们的种子点,也就是我们用来找点群的点;有两个种子点,所以K=2;然后,K-Means的算法如下:①随机在图中取K这里K=2个种子点;②然后对图中的所有点求到这K个种子点的距离,假如点Pi离种子点Si最近,那么Pi属于Si点群;我们可以看到A,B属于上面的种子点,C,D,E属于下面中部的种子点③接下来,我们要移动种子点到属于他的“点群”的中心;见图上的第三步④然后重复第2和第3步,直到,种子点没有移动我们可以看到图中的第四步上面的种子点聚合了A,B,C,下面的种子点聚合了D,E;聚类的效果如下图,折线是历次循环时3个簇的质心的更新轨迹,黑点是初始质心:我们查看基本K均值算法实现步骤及上面的聚类效果可以发现,该聚类算法将所有数据点都进行了指派,不识别噪音点;另外选择适当的初试质心是基本K均值过程的关键;2、k均值的优缺点及分类优点:1,简单,易于理解和实现;2,时间复杂度低缺点:1kmeans要手工输入类数目,对初始值的设置很敏感;所以有了k-means++、intelligent k-means、genetic k-means;2k-means对噪声和离群值非常敏感,所以有了k-medoids和k-medians;3k-means只用于numerical类型数据,不适用于categorical类型数据,所以k-modes;4k-means不能解决非凸non-convex数据,所以有了kernel k-means;5k-means主要发现圆形或者球形簇,不能识别非球形的簇;3、k-means与DBSCAN的区别k-means聚类算法的初始点选择不稳定,是随机选取的,这就引起聚类结果的不稳定;k-means属于动态聚类,往往聚出来的类有点圆形或者椭圆形;kmeans对于圆形区域聚类效果较好,dbscan基于密度,对于集中区域效果较好;对于不规则形状,kmeans完全无法用,dbscan可以起到很好的效果;4、k-means注意问题1K如何确定kmenas算法首先选择K个初始质心,其中K是用户指定的参数,即所期望的簇的个数;这样做的前提是我们已经知道数据集中包含多少个簇,但很多情况下,我们并不知道数据的分布情况,实际上聚类就是我们发现数据分布的一种手段;如何有效的确定K值,这里大致提供几种方法:①与层次聚类结合2经常会产生较好的聚类结果的一个有趣策略是,首先采用层次凝聚算法决定结果粗的数目,并找到一个初始聚类,然后用迭代重定位来改进该聚类;②稳定性方法3稳定性方法对一个数据集进行2次重采样产生2个数据子集,再用相同的聚类算法对2个数据子集进行聚类,产生2个具有k个聚类的聚类结果,计算2个聚类结果的相似度的分布情况;2个聚类结果具有高的相似度说明k个聚类反映了稳定的聚类结构,其相似度可以用来估计聚类个数;采用次方法试探多个k,找到合适的k值;③系统演化方法3系统演化方法将一个数据集视为伪热力学系统,当数据集被划分为K个聚类时称系统处于状态K;系统由初始状态K=1出发,经过分裂过程和合并过程,系统将演化到它的稳定平衡状态Ki,所对应的聚类结构决定了最优类数Ki;系统演化方法能提供关于所有聚类之间的相对边界距离或可分程度,适用于明显分离的聚类结构和轻微重叠的聚类结构;④使用canopy算法进行初始划分4基于Canopy Method的聚类算法将聚类过程分为两个阶段Stage1、聚类最耗费计算的地方是计算对象相似性的时候,Canopy Method在第一阶段选择简单、计算代价较低的方法计算对象相似性,将相似的对象放在一个子集中,这个子集被叫做Canopy ,通过一系列计算得到若干Canopy,Canopy之间可以是重叠的,但不会存在某个对象不属于任何Canopy的情况,可以把这一阶段看做数据预处理;Stage2、在各个Canopy 内使用传统的聚类方法如K-means,不属于同一Canopy 的对象之间不进行相似性计算;从这个方法起码可以看出两点好处:首先,Canopy 不要太大且Canopy 之间重叠的不要太多的话会大大减少后续需要计算相似性的对象的个数;其次,类似于K-means这样的聚类方法是需要人为指出K 的值的,通过Stage1得到的Canopy 个数完全可以作为这个K值,一定程度上减少了选择K的盲目性;其他方法如贝叶斯信息准则方法BIC可参看文献5;2初始质心的选取选择适当的初始质心是基本kmeans算法的关键步骤;常见的方法是随机的选取初始质心,但是这样簇的质量常常很差;处理选取初始质心问题的一种常用技术是:多次运行,每次使用一组不同的随机初始质心,然后选取具有最小SSE误差的平方和的簇集;这种策略简单,但是效果可能不好,这取决于数据集和寻找的簇的个数;第二种有效的方法是,取一个样本,并使用层次聚类技术对它聚类;从层次聚类中提取K个簇,并用这些簇的质心作为初始质心;该方法通常很有效,但仅对下列情况有效:1样本相对较小,例如数百到数千层次聚类开销较大;2K相对于样本大小较小第三种选择初始质心的方法,随机地选择第一个点,或取所有点的质心作为第一个点;然后,对于每个后继初始质心,选择离已经选取过的初始质心最远的点;使用这种方法,确保了选择的初始质心不仅是随机的,而且是散开的;但是,这种方法可能选中离群点;此外,求离当前初始质心集最远的点开销也非常大;为了克服这个问题,通常该方法用于点样本;由于离群点很少多了就不是离群点了,它们多半不会在随机样本中出现;计算量也大幅减少;第四种方法就是上面提到的canopy算法;3距离的度量常用的距离度量方法包括:欧几里得距离和余弦相似度;两者都是评定个体间差异的大小的;欧几里得距离度量会受指标不同单位刻度的影响,所以一般需要先进行标准化,同时距离越大,个体间差异越大;空间向量余弦夹角的相似度度量不会受指标刻度的影响,余弦值落于区间-1,1,值越大,差异越小;但是针对具体应用,什么情况下使用欧氏距离,什么情况下使用余弦相似度从几何意义上来说,n维向量空间的一条线段作为底边和原点组成的三角形,其顶角大小是不确定的;也就是说对于两条空间向量,即使两点距离一定,他们的夹角余弦值也可以随意变化;感性的认识,当两用户评分趋势一致时,但是评分值差距很大,余弦相似度倾向给出更优解;举个极端的例子,两用户只对两件商品评分,向量分别为3,3和5,5,这两位用户的认知其实是一样的,但是欧式距离给出的解显然没有余弦值合理;4质心的计算对于距离度量不管是采用欧式距离还是采用余弦相似度,簇的质心都是其均值,即向量各维取平均即可;5算法停止条件一般是目标函数达到最优或者达到最大的迭代次数即可终止;对于不同的距离度量,目标函数往往不同;当采用欧式距离时,目标函数一般为最小化对象到其簇质心的距离的平方和;当采用余弦相似度时,目标函数一般为最大化对象到其簇质心的余弦相似度和;6空聚类的处理如果所有的点在指派步骤都未分配到某个簇,就会得到空簇;如果这种情况发生,则需要某种策略来选择一个替补质心,否则的话,平方误差将会偏大;一种方法是选择一个距离当前任何质心最远的点;这将消除当前对总平方误差影响最大的点;另一种方法是从具有最大SSE的簇中选择一个替补的质心;这将分裂簇并降低聚类的总SSE;如果有多个空簇,则该过程重复多次;另外,编程实现时,要注意空簇可能导致的程序bug;三、基于密度的聚类基于密度的方法Density-based methods:k-means解决不了不规则形状的聚类;于是就有了Density-based methods来系统解决这个问题;该方法同时也对噪声数据的处理比较好;基于密度聚类的思想:思路就是定一个距离半径,最少有多少个点,然后把可以到达的点都连起来,判定为同类;其原理简单说画圈儿,其中要定义两个参数,一个是圈儿的最大半径,一个是一个圈儿里最少应容纳几个点;最后在一个圈里的,就是一个类;DBSCAN Density-Based Spatial Clustering of Applications with Noise就是其中的典型,可惜参数设置也是个问题,对这两个参数的设置非常敏感;DBSCAN的扩展叫OPTICSOrdering Points To Identify Clustering Structure通过优先对高密度high density进行搜索,然后根据高密度的特点设置参数,改善了DBSCAN的不足;1、DBSCAN的概念dbscan基于密度,对于集中区域效果较好,为了发现任意形状的簇,这类方法将簇看做是数据空间中被低密度区域分割开的稠密对象区域;一种基于高密度连通区域的基于密度的聚类方法,该算法将具有足够高密度的区域划分为簇,并在具有噪声的空间数据中发现任意形状的簇;DBSCAN中的几个定义:Ε邻域:给定对象半径为Ε内的区域称为该对象的Ε邻域;核心对象:如果给定对象Ε领域内的样本点数大于等于MinPts,则称该对象为核心对象;直接密度可达:对于样本集合D,如果样本点q在p的Ε领域内,并且p为核心对象,那么对象q从对象p直接密度可达;密度可达:对于样本集合D,给定一串样本点p1,p2….pn,p= p1,q= pn,假如对象pi从pi-1直接密度可达,那么对象q从对象p密度可达;注意:密度可达是单向的,密度可达即可容纳同一类;密度相连:存在样本集合D中的一点o,如果对象o到对象p和对象q都是密度可达的,那么p和q密度相联;密度可达是直接密度可达的传递闭包,并且这种关系是非对称的;密度相连是对称关系;DBSCAN目的是找到密度相连对象的最大集合;有了以上的概念接下来就是算法描述了:DBSCAN通过检查数据库中每点的r邻域来搜索簇;如果点p 的r邻域包含的点多于MinPts个,则创建一个以p为核心对象的新簇;然后,DBSCAN迭代的聚集从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并;当没有新的点可以添加到任何簇时,该过程结束;例如:Eg: 假设半径Ε=3,MinPts=3,点p的E领域中有点{m,p,p1,p2,o}, 点m的E领域中有点{m,q,p,m1,m2},点q的E领域中有点{q,m},点o的E领域中有点{o,p,s},点s的E领域中有点{o,s,s1}.那么核心对象有p,m,o,sq不是核心对象,因为它对应的E领域中点数量等于2,小于MinPts=3;点m从点p直接密度可达,因为m在p的E领域内,并且p为核心对象;点q从点p密度可达,因为点q从点m直接密度可达,并且点m从点p直接密度可达;点q到点s密度相连,因为点q从点p密度可达,并且s从点p密度可达;2、簇的生成原理及过程1DBSCAN聚类算法原理的基本要点:确定半径eps的值①DBSCAN算法需要选择一种距离度量,对于待聚类的数据集中,任意两个点之间的距离,反映了点之间的密度,说明了点与点是否能够聚到同一类中;由于DBSCAN算法对高维数据定义密度很困难,所以对于二维空间中的点,可以使用欧几里德距离来进行度量;②DBSCAN算法需要用户输入2个参数:一个参数是半径Eps,表示以给定点P为中心的圆形邻域的范围;另一个参数是以点P为中心的邻域内最少点的数量MinPts;如果满足:以点P为中心、半径为Eps 的邻域内的点的个数不少于MinPts,则称点P为核心点;③DBSCAN聚类使用到一个k-距离的概念,k-距离是指:给定数据集P={pi; i=0,1,…n},对于任意点Pi,计算点Pi到集合D的子集S={p1, p2, …, pi-1, pi+1, …, pn}中所有点之间的距离,距离按照从小到大的顺序排序,假设排序后的距离集合为D={d1, d2, …, dk-1, dk, dk+1, …,dn},则dk就被称为k-距离;也就是说,k-距离是点pi到所有点除了pi点之间距离第k近的距离;对待聚类集合中每个点pi都计算k-距离,最后得到所有点的k-距离集合E={e1, e2, …, en};④根据经验计算半径Eps:根据得到的所有点的k-距离集合E,对集合E进行升序排序后得到k-距离集合E’,需要拟合一条排序后的E’集合中k-距离的变化曲线图,然后绘出曲线,通过观察,将急剧发生变化的位置所对应的k-距离的值,确定为半径Eps的值;⑤根据经验计算最少点的数量MinPts:确定MinPts的大小,实际上也是确定k-距离中k的值,DBSCAN 算法取k=4,则MinPts=4;⑥另外,如果觉得经验值聚类的结果不满意,可以适当调整Eps和MinPts的值,经过多次迭代计算对比,选择最合适的参数值;可以看出,如果MinPts不变,Eps取得值过大,会导致大多数点都聚到同一个簇中,Eps过小,会导致一个簇的分裂;如果Eps不变,MinPts的值取得过大,会导致同一个簇中点被标记为噪声点,MinPts过小,会导致发现大量的核心点;我们需要知道的是,DBSCAN算法,需要输入2个参数,这两个参数的计算都来自经验知识;半径Eps的计算依赖于计算k-距离,DBSCAN取k=4,也就是设置MinPts=4,然后需要根据k-距离曲线,根据经验观察找到合适的半径Eps的值;2连通核心点生成簇核心点能够连通有些书籍中称为:“密度可达”,它们构成的以Eps长度为半径的圆形邻域相互连接或重叠,这些连通的核心点及其所处的邻域内的全部点构成一个簇;假设MinPts=4,则连通的核心点示例,如下图所示:计算连通的核心点的思路是,基于广度遍历与深度遍历集合的方式:从核心点集合S中取出一个点p,计算点p与S集合中每个点除了p点是否连通,可能会得到一个连通核心点的集合C1,然后从集合S中删除点p和C1集合中的点,得到核心点集合S1;再从S1中取出一个点p1,计算p1与核心点集合S1集中每个点除了p1点是否连通,可能得到一个连通核心点集合C2,再从集合S1中删除点p1和C2集合中所有点,得到核心点集合S2,……最后得到p、p1、p2、……,以及C1、C2、……就构成一个簇的核心点;最终将核心点集合S中的点都遍历完成,得到所有的簇;参数eps的设置,如果eps设置过大,则所有的点都会归为一个簇,如果设置过小,那么簇的数目会过多;如果MinPts设置过大的话,很多点将被视为噪声点;3、根据数据点的密度分为三类点:1核心点:该点在邻域内的密度超过给定的阀值MinPs;2边界点:该点不是核心点,但是其邻域内包含至少一个核心点;3噪音点:不是核心点,也不是边界点;有了以上对数据点的划分,聚合可以这样进行:各个核心点与其邻域内的所有核心点放在同一个簇中,把边界点跟其邻域内的某个核心点放在同一个簇中;聚类的效果如下图,黑色是噪音点:初识聚类算法:因为DBSCAN使用簇的基于密度的定义,因此它是相对抗噪音的,并且能处理任意形状和大小的簇;但是如果簇的密度变化很大,例如ABCD四个簇,AB的密度大大大于CD,而且AB附近噪音的密度与簇CD 的密度相当,这是当MinPs较大时,无法识别簇CD,簇CD和AB附近的噪音都被认为是噪音;当MinPs 较小时,能识别簇CD,但AB跟其周围的噪音被识别为一个簇;这个问题可以基于共享最近邻SNN的聚类结局;4、DBSCAN的优缺点:优点:1. 与K-means方法相比,DBSCAN不需要事先知道要形成的簇类的数量;2. 与K-means方法相比,DBSCAN可以发现任意形状的簇类;3. 同时,DBSCAN能够识别出噪声点;对于数据库中样本的顺序不敏感,即Pattern的输入顺序对结果的影响不大;但是,对于处于簇类之间边界样本,可能会根据哪个簇类优先被探测到而其归属有所摆动;缺点:1. DBScan不能很好反映高尺寸数据;2. DBScan不能很好反映数据集变化的密度;3.对于高维数据,点之间极为稀疏,密度就很难定义了;。
各种聚类算法介绍及对比聚类算法是数据挖掘和机器学习领域中广泛应用的一类算法,用于将数据集中具有相似特征的样本归为一类。
聚类算法可以帮助人们发现数据中的模式、规律和隐藏的结构,为数据分析、分类、推荐系统等任务提供支持。
本文将介绍常见的聚类算法,并对它们进行对比。
1.基于距离的聚类算法基于距离的聚类算法主要根据样本之间的距离或相似度进行聚类。
-K-均值聚类算法:该算法将数据集分为K个簇,通过最小化簇内样本到簇心的距离来优化聚类结果,选择K个簇心作为初始值,迭代优化直到收敛。
-层次聚类算法:通过逐步合并或拆分簇来构建聚类层次结构,可以根据需求选择最优的聚类数量。
常见的层次聚类算法包括凝聚层次聚类和分裂层次聚类。
2.基于密度的聚类算法基于密度的聚类算法将样本集合看作是由高密度的区域分隔的低密度区域。
-DBSCAN算法:该算法通过确定样本的领域密度和边界点来将样本分为核心点、边界点和噪声点,进而构建聚类簇。
-OPTICS算法:该算法类似于DBSCAN算法,但通过定义可达性图和最小可达距离来克服DBSCAN算法对距离阈值的依赖性。
3.基于分布的聚类算法基于分布的聚类算法假设样本遵循其中一种概率分布,并通过拟合分布的参数来进行聚类。
-高斯混合模型(GMM):该算法假设样本服从多个高斯分布的混合模型,通过最大似然法估计模型参数,并用EM算法进行迭代优化。
-K-均值变分推断(VB-KM):该算法将K-均值算法与变分推断相结合,通过优化变分下界来估计簇分配和簇参数。
4.基于谱分析的聚类算法基于谱分析的聚类算法将样本看作是图结构中的节点,利用图的特征向量进行聚类。
-谱聚类算法:该算法通过构建样本图的相似度矩阵,然后利用特征值分解或K-最近邻图进行降维,最后利用K-均值或其他聚类算法进行聚类。
聚类算法的选择取决于数据的特点和问题的需求。
基于距离的聚类算法对初始值敏感,适用于簇内样本具有高度相似性的问题;基于密度的聚类算法具有对于噪声和离群点的鲁棒性,适用于不规则形状的聚类;基于分布的聚类算法适用于数据拟合性较好的问题;基于谱分析的聚类算法适用于非线性聚类。
聚类是属于非监督学习中的应用。
非监督的意思是,我不知道label是什么,有什么。
其实在现实生活,给数据集标label的成本过高,所以大多数数据集是没有label,
这也可以知道非监督学习的重要性。
这次给大家分享:K-means聚类、均值漂移聚类、基于密度的聚类、基于分布的聚类(本文用高斯分布做例子)、层次聚类。
1. K-means 聚类
1)过程:
S1. 选定K,K是最终聚类的数目。
这需要一定的先验知识,如果没有的话,可能需要随机试再用交叉验证看分类效果哪个更好,就选定那个K。
S2. 选取K个初始的质心,最好不要选太近的质心,因为初始质心的选择虽然不会影
响最终结果,但是影响算法运行的时间。
S3. 计算每个样本离这些质心的距离,选择最近的质心并与它结合为一类。
S4. 得到K个类之后,重新计算每一个类中新的质心,重复以上步骤,直至质心不再
改变。
2)K-Means的主要优点有:
a. 原理比较简单,实现也是很容易,收敛速度快。
b. 聚类效果较优。
c. 算法的可解释度比较强。
d. 主要需要调参的参数仅仅是簇数k。
3)K-Means的主要缺点有:
a. K值的选取不好把握
b. 只能处理球形的簇
c. 对于不是凸的数据集比较难收敛
d. 如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳。
e. 采用迭代方法,得到的结果只是局部最优。
f. 对噪音和异常点比较的敏感(因为质心的选择基于均值,所以之后也有K-median
聚类算法,这样可以减小噪音和异常点的影响,但运行速度变得更慢)。
2. 均值漂移聚类
1)原理
a. 假定样本空间中的每个聚类均服从某种已知的概率分布规则
b. 用不同的概率密度函数拟合样本中的统计直方图,不断移动密度函数的中心(均值)的位置,直到获得最佳拟合效果为止。
c. 这些概率密度函数的峰值点就是聚类的中心,再根据每个样本距离各个中心的距离,选择最近聚类中心所属的类别作为该样本的类别。
2)优点
a. 聚类数不必事先已知,算法会自动识别出统计直方图的中心数量。
b. 聚类中心不依据于最初假定,聚类划分的结果相对稳定。
3)缺点
a. 样本空间应该服从某种概率分布规则,否则算法的准确性会大打折
3. 基于密度的聚类方法(DBSCAN)
1)原理
是一种基于密度的空间聚类算法。
该算法将具有足够密度的区域划分为簇,并在具有噪声的空间数据库中发现任意形状的簇,它将簇定义为密度相连的点的最大集合。
所以就会涉及到两个参数:区域半径及密度。
区域半径可以使用寻找突变点进行“猜测”,什么是寻找突变点呢?
就是先选中一个点,然后计算它与其他点的距离,并从小到大排序,如果我们发现某
两个紧挨的点的值有“骤变”,那么我们就选择这某两个点的其中一个点对应的值为
半径(通常为前一个点),但其实还是需要多次实验才可以得到相对较好的区域半径。
至于密度的话,也是靠“猜”出来了。
2)优点
a. 可以对任意形状的稠密数据集进行聚类.
b. 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
3)缺点
a. 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
b. 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或
者球树进行规模限制来改进。
c. 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域
样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。
4. 用高斯混合模型(GMM)的最大期望(EM)聚类
1)原理
a. 根据名字,我们就可以知道与高斯有关系,这个聚类会先假定数据点是呈高斯分布的。
有了高斯分布,自然离不开均值与方差。
在此聚类中,均值和方差就是用来描述
簇的形状。
每个簇都会有自己的高斯分布。
b. 那么我们如何知道这两个参数呢?这就涉及到了EM算法。
EM算法是一个怎么样神奇的算法,以至于可以估计出两个未知的参数呢?
它的思路就是:假设我们想估计知道A和B两个参数,在开始状态下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反过来知道了B也就得到了A。
可以考
虑首先赋予A某种初值,以此得到B的估计值,然后从B的当前值出发,重新估计A
的取值,这个过程一直持续到收敛为止。
它的流程:
初始化分布参数θ,重复以下步骤直到收敛:
E步骤:E步选择出合适的隐变量分布(一个以观测变量为前提条件的后验分布),使得参数的似然函数与其下界相等,从而计算最大似然的期望值;
M步骤:最大化在 E 步上找到的最大似然的期望值,也就是最大化似然函数的下界;
从而计算参数的最大似然估计,拟合出参数。
因为下界不断提高,所以极大似然估计单调增加,那么最终我们会到达最大似然估计
的最大值。
对于信息缺失的数据来说,EM算法是一种极有效的工具。
c. 得知以上参数之后,就可以给定每个簇的高斯分布,计算每个数据点属于每个簇的概率。
一个点越靠近高斯分布的中心就越可能属于该簇。
d. 基于这些概率我们计算高斯分布参数使得数据点的概率最大化,可以使用数据点概率的加权来计算这些新的参数,权重就是数据点属于该簇的概率。
e. 重复迭代c和e直到在迭代中的变化不大。
2)优点
a. 簇的形状不仅可以为圆形,也可以为椭圆形。
b. 因为使用的是概率,所以支持某个数据点同时存在多个类的判断。
5. 凝聚层次聚类
1)是一个自下而上的聚类算法。
步骤:
a. 将每个数据点视为一个单一的簇,然后选择一个测量两个簇之间距离的度量标准。
例如我们使用average linkage作为标准,它将两个簇之间的距离定义为第一个簇中的数据点与第二个簇中的数据点之间的平均距离。
b. 在每次迭代中,我们将两个具有最小average linkage的簇合并成为一个簇。
c. 重复步骤2知道所有的数据点合并成一个簇,然后选择我们需要多少个簇。
2)优点:不需要提前知道需要多少类、对距离衡量标准不敏感
3)缺点:效率低。