聚类是试图将数据集中的样本划分为若干个不相交的子集。每个子集称为一个“簇”(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 。
各种聚类算法的系统介绍和比较