聚类算法(二)、聚类算法的系统性比较

      聚类是试图将数据集中的样本划分为若干个不相交的子集。每个子集称为一个“簇”(cluster)。聚类既能作为一个单独的过程,也可以作为分类等其他学习任务的前驱任务、例如,在一些商业应用中,需要对新用户的类型进行判别,但是定义“用户l类型”对商家来说可不容易,此时,往往先对用户数据进行聚类,根据聚类结果将每个簇定义为一个类,然后再基于这些类训练分类模型,用于判别新用户的类型。

      网上有各种详细的总结,总结的非常好,但是太多。本文做个简单的总结                                                                                        

聚类算法的系统性比较  

聚类算法

思想

代表性算法及使用条件

优缺点  

1、基于层次

1、将每个数据看成一类,计算两两之间的距离;

2、将距离最小的两个类合并为新类;

3、重新计算新类与其他所有的类之间的距离;

4、重复2~3,直到所有的类合并为一类

适合小数量级的聚类;

改进的算法有:BIRCH、chaneleon(比 BIRCH 更好用)

优点:

1、可解释性好;

2、可以应用在 K-means 先去 K 值比较大的时候的最后合并阶段;能帮助解决k-means 不能解决的非凸数据

缺点:

1、时间复杂度高

2、贪心算法,一步错步步错

2、基于划分

基本思想:类内的点足够近、类间的点足够远

k-means 基本步骤:

1、随机选择 K 个点 ,当成 k 类

2、遍历所有的点,根据距离,将点归属到 k 个类别中

3、重新计算 k 个类中每一个类的中心点,更换聚类中心

4、重复进行2、3步,直到聚类中心不发生变化

1、对 初始值 k 敏感。所以有 k-means++

2、

3、对异常值敏感。所以有 k-medoids(k 中心点,取所有点最中心的那个店)、k-medians(k 中值,取所有点的中位数)

4、只能解决数值型数据,所以有 k-model;解决不了非秃数据,所以有 kernel k-means

k-means 优点:

1、对于大型数据集简单有效,时间复杂度低,空间复杂度低

缺点:

1、对初始值 K 敏感,需要预先设定 k 

2、初始值需要随机选择点作为聚类中心

2、对噪声和离群点敏感

3、只能用于数值型数据,不能解决非秃数据

3、基于密度

k-means 解决不了不规则形状的聚类。基于密度的聚类方法核心思想是:先发现密度较高的点,然后将相近的高密度点逐步连成一片,进而形成簇。以典型算法 DBSCAN为例:

1、以每一个数据点为圆心,以 eps 为半径华哥圆圈,这个圆圈称为邻域(eps-neigbourhood)。这个圈内有多少点,称为该点的密度值

2、选取一个密度阈值 Minpts。如果圈里面的点数小于Minpts的圆心点,则称为低密度点,反之,为高密度点(此时该圆心点称为 core point)

3、如果一个高密度点在另外一个高密度点的圈内,就把两个点连起来,这样就会把很多点串联起来。如果低密度点在高密度点的圈内,把它连到最近的高密度点上,称之为边界点

4、重复处理2、3。所有能够连在一起的点就称为一个簇,而不在任何高密度点的圈内的低密度点,就是异常点

 

DBSCAN是 Density-Based Spatial Clusering of Applications with Noise ,,OPTICS (Ordering Points To Identify Clustering Structure)是对其的改进。该算法先对高密度的进行搜索,然后根据高密度的特点设置参数。

DBSCAN优点:

1、对噪声不敏感

2、能发现任意形状的簇。这是因为DBSCAN 是靠不断连接邻域呢高密度点来发现簇的,只需要定义邻域大小和密度阈值,因此可以发现不同形状,不同大小的簇

 

DBSCAN 缺点:

1、对两个参数的设置敏感,即圈的半径 eps 、阈值 MinPts。

2、DBSCAN 使用固定的参数识别聚类。显然,当聚类的稀疏程度不同,聚类效果也有很大不同

4、基于网络

核心思想是:将数据空间划分为一个个网格,将数据按照一定的规则映射到网格单元中,然后计算每个单元的密度。根据预先设定的阈值判断出每个网格单元是否为高密度单元,由临近的高密度单元组成一个类。

具体步骤:

1、划分为若干个网格

2、使用网格内数据的统计信息对数据进行压缩表达

3、基于2中的统计信息,判断是否为高密度单元

4、将临近的高密度单元合并为簇

1、一般和基于密度的算法结合使用

 

2、常见算法有:STING、wave-cluster、clique

优点:

1、聚类速度快。

 

缺点:

1、对参数敏感

2、无法处理不规则分布的数据

3、会产生维度灾难

4、算法精度不高(因为算法的速度以牺牲算法的精度为代价的)

5、基于模型

给每个簇预先假定一个模型,然后寻找数据对给定模型的最佳拟合。这类方法主要有

1、基于概率模型的方法。其中最典型的是高斯混合分布 GMM

2、基于神经网络模型的方法。最典型的是SOM。这也是目前唯一的非监督学习的神经网络 

 

优点:

1、是一种“软聚类”,即样本点不是以 100% 确定地被分到一个类别中,而是以概率的形式。

2、每一类的特征也可以用参数来进行表达

 

缺点:

1、执行效率不高,特别是那些分布数量很多,但是数据量很少的情况

6、基于模糊

基于模糊集理论的聚类方法,仰恩以一定的概率属于某个类。基本思想是:

1、计算样本或者变量间的相似系数,建立模糊相似矩阵

2、利用模糊运算对相似矩阵进行一系列的合成改造,生成模糊等价矩阵

3、根据不同的截取水平,对模糊等价矩阵进行阶段分类

 

FCM 是目前比较典型的模糊聚类方法,它是对 HCM 算法的改进

优点:

1、克服非此即彼的分类缺点

2、对满足正态分布的数据,聚类效果会很好

 

缺点:

1、不能确保 FCM 收敛于一个最优解

2、算法的性能依赖于吃书聚类中心。因此,如果要用 FCM ,要么使用别的算法来确定初始聚类中心,要么每次用不同的初始聚类中心启动该算法,多次运行 FCM

7、其它聚类方基于约束  
 核聚类

核聚类增加了样本特征的优化,它通过核函数,将地位空间的样本映射到高位的特征空间,并且在该特征空间中进行聚类。

代表算法有:SVDD算法、svc 算法

1、通过非线性映射,可以分辨、放大、提取有用的特征。聚类更准确

2、算法的收敛速度快

3、在某些经典算法失效的情况下,核聚类算法仍然能得到较好的结果

 

谱聚类

 

谱聚类是建立在图论中的谱图理论基础上的,本质是将聚类问题转化为图的最优划分问题,是一种点对聚类方法。核心思想如下:

1、根据样本数据集,定义一个描述成对数据点相似度的亲和矩阵

2、计算矩阵的特征值和特征向量

3、选择合适的特征向量,聚类不同的数据点

谱聚类将 Laplacian 数据降维和 k-means 结合在一起。通常,谱聚类比 k-means 效果要好很多,而且计算复杂度很低
 量子聚类一个典型的例子是基于相关点的 Pott 自旋和统计机理提出的量子聚类模型把聚类问题看做是一个物理系统。许多算例表明,有几种聚类问题,传统方法无能为力,但是量子聚类能取得不错的聚类效果

数据预处理     

经典的聚类方法,也就上面十几个吧。一般情况下,我们拿到的数据是海量的、包含很多噪声的,那么,就需要我们队数据进行处理。处理的方式大致有以下几种:

1、数据变换。比如在数字信号处理中,尤其是图像处理中,使用离散傅里叶变换,可以提取数据的频域信息;离散小波变换,可以提取到频域信息和时域信息。

2、降维。对于线性特征明显的数据,一般采用 PCA、SVD 算法。处理非线性降维的算法主要有流形学习,比如 ISOMAP 、LLE、MVU、kernel PCA 等。 降维在聚类中的应用,最著名的就是谱聚类:首先用 Laplacian eigenmaps对数据降维(具体点说,就是先将数据转换成临接矩阵或相似性矩阵,再转换成 Laplacian 矩阵,再将 Laplacian 矩阵进行特征分解,把最小的 K 个特征向量排列在一起);然后使用 k-means 聚类。通常,谱聚类的速度比 k-means 快很多,并且效果也要好很多。

3、抽样。比如 CLARA 算法的提出,就是因为 k-medoids 应对不了大规模的数据集。但是实际工程中,一般不采用抽样的方法

 

相似性度量

      相似性度量可以直接度量原始输入数据的相似度,也可以度量从原始数据中提取的特征的相似性。不管怎么提取,一般有以下几种方法:

1、距离。比如 L1 norm ,就是曼哈顿距离,如果是 L2 norm ,就是欧式距离。此外,想 GMM 使用的是 Mahalanobis 距离

2、相似系数。主要是夹角的余弦值和相关系数

3、核函数

4、DTW,它是计算两个不同长度的向量的距离,主要应用在时间序列的一些场合中

 

衡量一个算法的优劣

1、算法的处理数据能力:能否处理大的数据集;能否处理数据噪声;能否处理任意形状的数据;能否处理包含嵌套数据的数据集

2、算法是否需要预设条件:是否预先设定阈值;是否需要预先设定聚类的个数;是否啊哟预先某些约束条件

3、算法对输入数据的敏感性:算法的效果是否和输入数据的顺序有关;对数据类型有没有要求;对数据维度有没有要求

 

 

本文主要参考: 

周志华:《机器学习》

清华大学数据科学研究院的一篇文章:https://www.zhihu.com/question/34554321 。
各种聚类算法的系统介绍和比较

四种聚类方法的比较

基于密度的聚类方法

机器学习:基于网格的聚类方法

 

 

 

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/dengheCSDN/article/details/82748991
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞