机器学习---1.聚类算法纲领总结

     近期定了研究生毕设的课题,有种一锤定两年的赶脚。心里还是有点方,只好天天催眠自己现在的选择就是最好的选择。

     其中一块应该会用到聚类算法,这就需要我对各种种类的适用条件、参数摸清楚了,到时候再选出效果最好的聚类方式。想想算法十来种,参数无穷种调法,这个组合起来工作量也是真的大,微笑活下去...微笑着学习...参考了一些博客,总结如下:

     一、聚类步骤

          1.数据准备:包括标准化、降维(主成分分析PCA等)、取样(随机取样等)、变换(离散傅里叶变换、离散小波变换等)等操作,如果需要用到再对应去查具体的。

          2.特征选择与提取:选择最有效的特征,也可以将选择的特征转换为新的突出特征(暂没研究转换的办法)

         3.执行聚类算法:选择合适的相似性度量方法(欧式距离、夹角余弦、相关系数、核函数、DTW(dynamic time warping)等)、合适的算法、合适的参数(下一节会讲)跑起来

          4.聚类结果评估:三种方式,外部有效性评估、内部有效性评估和相关性测试评估。

             外部指标:Jaccard系数、FM指数、Rand指数(见周志华教授西瓜书)

             内部指标:DB指数、Dunn指数(见周志华教授西瓜书)

             聚类内平方和(Within-Cluster Sum-of-Squares)测量每个聚类内的方差。聚类越好,整体 WCSS 就越低(见博客)

    二、聚类算法

          1.基于划分的聚类方法

             1)思想:类内的点都足够近,类间的点都足够远

             2)算法:最基本的就是k-means。

                             k-means对初始值的设置很敏感,所以有了k-means++、intelligent k-means、genetic k-means。 
                             k-means对噪声和离群值非常敏感,所以有了k-medoids(计算中位数而不是均值,但会更慢)和k-medians。 
                             k-means只用于numerical类型数据,不适用于categorical类型数据,所以有了k-modes。 

                             k-means易陷入局部最优,所以有了二分 k-means
                             k-means不能解决非凸(non-convex)数据,所以有了kernel k-means。

            3)特点:计算量大,适合发现中小规模的数据库中小规模的数据库中的球状簇(不知道“中等”到底有多“中”,所以不妨理解成,数据集越大,越有可能陷入局部最小);需要自己设置分组数(吴恩达视频里说到过这是个模糊的数目,凭经验和肘部原理设);以及上面的k-means的四个问题(不知道改进后效果如何)

           4)sklearn参考:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans

        http://scikit-learn.org/stable/modules/generated/sklearn.cluster.MiniBatchKMeans.html#sklearn.cluster.MiniBatchKMeans

          2.基于层次的聚类方法

             1)思想:自上而下就是从一个类分裂为多个类,自下而上就是每个样本一个类,不断合并为多个类

             2)算法:AGNES自底向上,因为计算复杂度比较大适用于小数量级

                            改进的算法有:BIRCH主要是在数据体量很大的时候使用,而且数据类型是numerical;Chameleon里用到的linkage是kNN(k-nearest-neighbor)算法,并以此构建一个graph,Chameleon的聚类效果被认为非常强大,比BIRCH好用,但运算复杂还是很高,O(n^2);还有博客中提到CURE算法。

             3)特点:K-means不能解决的非球形族就可以解决了

                              时间复杂度高啊,o(m^3),改进后的算法也有o(m^2lgm),m为点的个数

            4)birch:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.Birch.html#sklearn.cluster.Birch

             

         3.基于密度的聚类方法

             1)原理:只要一个区域中的点的密度大过某个阈值,就把它加到与之相近的聚类中去。其中要定义两个参数,一个是圈儿的最大半径,一个是一个圈儿里最少应容纳几个点。

             2)算法:最基本的就是DBSCAN,对参数设置超级敏感;还有均值漂移(Mean-shift,通过将中心点的候选点更新为滑动窗口内点的均值来完成,来定位每个组/类的中心点。不需要我们知道有多少类/组)

                            针对DBSCAN参数敏感问题,有了OPTICS(Ordering Points To Identify Clustering Structure),通过优先对高密度(high density)进行搜索,然后根据高密度的特点设置参数;还有博客提到DENCLUE算法

             3)特点:能克服基于距离的算法只能发现“类圆形”的聚类的缺点,可以处理不规则形状;对噪声处理也比较好

        4.基于网格的聚类方法

             1)原理:将数据空间划分为网格单元,将数据对象集映射到网格单元中,并计算每个单元的密度。根据预设的阈值判断每个网格单元是否为高密度单元,由邻近的稠密单元组形成”类“。

             2)算法:代表性算法有STING(STatistical INformation Grid)、CLIQUE(CLustering In QUEst)、WAVE-CLUSTER

             3)特点:优点就是执行效率高,因为其速度与数据对象的个数无关,而只依赖于数据空间中每个维上单元的个数。

                              缺点也是不少,比如对参数敏感、无法处理不规则分布的数据、维数灾难等。这种算法效率的提高是以聚类结果的精确性为代价的。经常与基于密度的算法结合使用。

         5.基于模型的聚类方法

            1)原理:为每簇假定了一个模型,寻找数据对给定模型的最佳拟合,这一类方法主要是指基于概率模型的方法和基于神经网络模型的方法,尤其以基于概率模型的方法居多。

            2)算法:其中最典型、也最常用的方法就是高斯混合模型(GMM,Gaussian Mixture Models);基于神经网络模型的方法主要就是指SOM(Self Organized Maps)了

            3)特点:优点:对”类“的划分不那么”坚硬“,而是以概率形式表现,每一类的特征也可以用参数来表达。 
                            缺点:执行效率不高,特别是分布数量很多并且数据量很少的时候。

       6.其他方法

            1)基于约束的方法

        真实世界中的聚类问题往往是具备多种约束条件的 , 然而由于在处理过程中不能准确表达相应的约束条件、不能很好地利用约束知识进行推理以及不能有效利用动态的约束条件 , 使得这一方法无法得到广泛的推广和应用。这里的约束可以是对个体对象的约束 , 也可以是对聚类参数的约束 , 它们均来自相关领域的经验知识。该方法的一个重要应用在于对存在障碍数据的二维空间数据进行聚类。 COD (Clustering with Ob2structed Distance) 就是处理这类问题的典型算法 , 其主要思想是用两点之间的障碍距离取代了一般的欧氏距离来计算其间的最小距离。

          2)量子聚类

        受物理学中量子机理和特性启发,可以用量子理论解决聚类记过依赖于初值和需要指定类别数的问题。一个很好的例子就是基于相关点的 Pott 自旋和统计机理提出的量子聚类模型。它把聚类问题看做一个物理系统。并且许多算例表明,对于传统聚类算法无能为力的几种聚类问题,该算法都得到了比较满意的结果。

           3)核聚类

         核聚类方法增加了对样本特征的优化过程,利用 Mercer 核 把输入空间的样本映射到高维特征空间,并在特征空间中进行聚类。核聚类方法是普适的,并在性能上优于经典的聚类算法,它通过非线性映射能够较好地分辨、提 取并放大有用的特征,从而实现更为准确的聚类;同时,算法的收敛速度也较快。在经典聚类算法失效的情况下,核聚类算法仍能够得到正确的聚类。代表算法有SVDD算法,SVC算法。

          4)谱聚类

         首先根据给定的样本数据集定义一个描述成对数据点相似度的亲合矩阵,并计算矩阵的特征值和特征向量,然后选择合适的特征向量聚类不同的数据点。谱聚类算法最初用于计算机视觉、VLSI设计等领域,最近才开始用于机器学习中,并迅速成为国际上机器学习领域的研究热点。谱聚类算法建立在图论中的谱图理论基础上,其本质是将聚类问题转化为图的最优划分问题,是一种点对聚类算法。

         5)模糊聚类

           基于模糊集理论的聚类方法,样本以一定的概率属于某个类。比较典型的有基于目标函数的模糊聚类方法、基于相似性关系和模糊关系的方法、基于模糊等价关系的传递闭包方法、基于模 糊图论的最小支撑树方法,以及基于数据集的凸分解、动态规划和难以辨别关系等方法。FCM算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法。该聚类算法是传统硬聚类算法的一种改进。

      6)AP算法

       AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法。AP算法的基本思想是将全部数据点都当作潜在的聚类中心(称之为exemplar),然后数据点两两之间连线构成一个网络(相似度矩阵),再通过网络中各条边的消息(responsibility和availability)传递计算出各样本的聚类中心。见博客http://www.cnblogs.com/lc1217/p/6908031.html

三、各种聚类算法的Python实现

           参考此篇博客http://www.cnblogs.com/lc1217/p/6963687.html

猜你喜欢

转载自blog.csdn.net/zhiman_zhong/article/details/81164830