正如“机器学习就是这么简单 之 K-means聚类”介绍,在数据分析中经常要用到聚类来解决一些问题。文章中虽然主要介绍的K-means算法,但是无论Weka还是scikit-learn套件都支持大量其它常用聚类算法。
常见聚类算法
常见聚类算法分为:
划分聚类:K-means、K-medoids
密度聚类:DBSCAN、OPTICS
层次聚类:Agglomerative、BIRCH、Chameleon、ROCK、divisive
网格聚类:STING
图聚类:Spectral
模型聚类:GMM
scikit-learn中支持了上述绝大多数聚类算法,并且每个算法都有其优劣以及适用场景:
基本原理
1.划分聚类
划分聚类中,最有名并且常用的就是K-means算法了。简单来说,就是按照某种距离度量,将相距比较近的点归为一类。首先需要确定分成几类,选取几个初始点作为中心点,然后根据启发式算法计算新的中心点,不停迭代直到满足停止条件。
它的主要优点就是简单、时间复杂度低。
同时它的缺点也很显著:
需要指定类别数,导致聚类出来的效果不一定是最好的
初始值选择的不同可能导致聚类结果不完全一致,因为它可能限于局部最优解
对噪声点和离群点均很敏感,对结果会有很大影响
只能解决非凸聚类,并且只能用于数值型(或者能转换成数值型)的数据
2. 密度聚类
密度聚类中,最有名的则是DBSCAN算法了。可划分聚类不同,该算法更多衡量一个阈值内,核心点周围的数据即构成了一类。画一个圈,定义两个参数,一个是圈的范围(最大半径),一个是圈内最少应该容纳多少数据,满足即可构成一类。
其有点对应划分聚类而言:
不需要事先指定类别数
对离群点和噪声点有很好的处理效果,使得主要聚类不会受其影响
可以应用于任何形状的类,而不限于非凸聚类
而其缺点也同样明显:
不能反映数据集变化的密度
高纬、稀疏数据,效果比较差
3. 层次聚类
层次聚类分为从上至下和从下至上两种,无论那种基本思路是接近的。它的概念有些类似于“分治算法”,以每个点为出发点,计算出最相近的对,形成子类别,然后迭代抽象出最相近的子类别,形成高层的子类别,以至所有数据都属于一类。因此可以结合树型结构理解下。
其主要优点是:
不需要事先指定类别数
度量容量,限制少
可以发现类的层次关系
缺点非常明显,且影响大:
计算量大,每个层次聚类都需要大量计算
奇异值会产生比较大的影响
在特殊情况下,会聚类成链状结果
4. 模型聚类
模型聚类用到了数理统计的思想,认为数据是服从几个概率分布综合作用的结果。GMM认为这些概率分布是几个高斯模型,而模型中的各种参数则是需要保证按照这些概率分布生成数据点的概率是最大的,即最大似然估计。
GMM最大优点是简单高效。
缺点则同样和K-means相似:
可能陷入局部最优解
需要手动指定高斯分布的个数
初始化值对结果影响非常大
不是和非凸数据分布集
本文暂时没有评论,来添加一个吧(●'◡'●)