目录
- 一、机器学习
- k-means
- 层次聚类
- 密度聚类
- 近邻传播算法(affinity propagation, AP)
- 基于网格的STING(statistical information grid)算法
- 密度峰值聚类(density peaksclustering, DPC)算法
- 谱聚类
- 总结各种算法的使用场景
- 二、深度聚类
- 2.1 基于自动编码器(AE)的深度聚类算法
- 2.2 基于聚类深度神经网络(CDNN)的深度聚类算法
- 2.3 基于变分自动编码器(VAE)的深度聚类算法
- 2.4 基于生成对抗网络(GAN)的深度聚类算法
一、机器学习
k-means
- 优点:
1,简单,易于理解和实现;
2,时间复杂度低
3,当簇是密集的、球状或团状的,而簇与簇之间区别明显时,它的聚类效果很好。 - 缺点:
1,需要对均值给出定义;
2,需要指定要聚类的数目,对 K 值敏感。也就是说,K 的选择会较大程度上影响分类效果;
3,对离群点和噪声点敏感,一些过大的异常值会带来很大影响;
4,算法对初始聚类中心选择敏感; - 改进:
1,针对离群点和噪声点,我们可以使用一些算法,比如 RANSAC 、LOF 等剔除离群点。此外,基于 K-means 的改进算法有 k-medoids 和 k-medians
2,K-means 是使用欧式距离来测量,显然,这种度量方式并不适合于所有的数据集。换句话说,K-means 比较适合聚那些球状的簇。参照 SVM 中核函数的思想,将样本映射到另外一个特征空间,就可以改善聚类效果。代表算法是;kernel K-means
3,只能聚凸的数据集。所谓的凸数据集,是指集合内的每一对点,连接两个点的直线段上的每个点也在该集合内。通俗讲就是K-means 聚类的形状一般只能是球状的,不能推广到任意的形状,但是有研究表明,若采用 Bregman 距离,则可显著增强此类算法对更多类型簇结构的适用性
层次聚类
层次聚类可以分为凝聚(agglomerative)层次聚类和分裂(divsive)层次聚类。
- 分裂层次聚类采用的就是"自顶而下"的思想,先将所有的样本都看作是同一个簇,然后通过迭代将簇划分为更小的簇,直到每个簇中只有一个样本为止。
- 凝聚层次聚类采用的是"自底向上"的思想,先将每一个样本都看成是一个不同的簇,通过重复将最近的一对簇进行合并,直到最后所有的样本都属于同一个簇为止。
- 优点:
1,距离和规则的相似度容易定义,限制少;
2,不需要预先制定聚类数;
3,可以发现类的层次关系;
4,可以聚类成其它形状 - 缺点:
1,计算复杂度太高;
2,奇异值也能产生很大影响;
3,算法很可能聚类成链状
密度聚类
- 优点:
1, 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。
2、 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
3、聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。 - 缺点:
1、如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合,如下图所示。
2、如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
3、 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。
近邻传播算法(affinity propagation, AP)
通过迭代不断更新每一个点的吸引度和归属度,从而找到类簇中心 . 该算法无需指定类簇数,但算法的时间复杂度较高,对海量数据聚类时,需消耗较长时间.
基于网格的STING(statistical information grid)算法
将数据空间划分成有限个单元,所有的处理都以单元为对象,该算法聚类速度快,但聚类精度不高.
密度峰值聚类(density peaksclustering, DPC)算法
Rodriguez等于2014年提出快速搜索和寻找密度峰值的聚类(clustering by fast search and findof density peaks),简称密度峰值聚类(density peaksclustering, DPC)算法.
DPC算法基于如下假设:
- 类簇中心被类簇中其他密度较低的数据点包围;
- 类簇中心间的距离相对较远
- DPC算法的优点主要包括:
- 不需要事先指定类簇数;
- 能够发现非球形类簇;
- 只有一个参数需要预先取值
- 缺点
- DPC算法定义的局部密度未考虑数据内部的结构差异,当类簇间的数据密集程度差异较大时,DPC算法并不能获得较好的聚类效果;
- 另外,DPC算法的样本分配策略存在分配连带错误.
谱聚类
谱聚类是经典的聚类方法之一,多应用于高维数据的降维和聚类问题,其聚类效果受相似性矩阵影响。
谱聚类算法的具体计算流程如下:
1)输入相似性矩阵A。其中第i行、第j列元素表示轨迹i和轨迹j的相似性。
2)根据相似性矩阵 A 构建邻接矩阵 W 和度矩阵D。
3)计算拉普拉斯矩阵L=D-W。
4)计算L 的特征值,将特征值从小到大排序,取前v个特征值,并计算前v 个特征值对应的特征向
量 , ,…, ,构建矩阵 =( , ,…, )。
5)令 等于 的 第 行向 量,使 用 k-means 算法对新的样本点 进行聚类,共聚
总结各种算法的使用场景
方法 | 参数 | 可扩展性 | 使用场景 | 度量使用 |
亲和力传播(Affinity propagation) | 阻尼,样本偏好 | 无法扩展 | 包含大量聚类,聚类大小不均,几何形状不平坦 | 图形距离(例如最邻近图) |
谱聚类(Spectral clustering) | 聚类的数量 | 中等的n_samples,小的n_clusters | 聚类数量很少,聚类大小不均,几何形状不平坦 | 图形距离(例如最邻近图) |
高斯混合(Gaussian mixtures) | 许多(many) | 不可扩展 | 平面几何形状,适合密度估计 | 到中心点的马氏距离(Mahalanobis distances) |
典型的深度聚类算法可以总结为下述的四大类:
2.1 基于自动编码器(AE)的深度聚类算法
AE模型(Auto-encoder),主要步骤很简单,有三层,输入-隐含-输出,把数据 input 进去,encode 然后再 decode,cost_function 就是 output 与 input 之间的“差值”(有公式),差值越小,目标函数值越优。
简单地说,就是你输入n维的数据,输出的还是n维的数据,有人可能会问,这有什么用呢,其实也没什么用,主要是能够把数据缩放,如果你输入的维数比较大,譬如实际的特征是几千维的,全部拿到算法里跑,效果不见得好,因为并不是所有特征都是有用的,用AE模型后,你可以压缩成m维(就是隐含层的节点数),如果输出的数据和原始数据的大小变换比例差不多,就证明这个隐含层的数据是可用的。这样看来好像和降维的思想类似,当然AE模型的用法远不止于此。
2.2 基于聚类深度神经网络(CDNN)的深度聚类算法
2.3 基于变分自动编码器(VAE)的深度聚类算法
2.4 基于生成对抗网络(GAN)的深度聚类算法
参考:
[1] k-means聚类,密度聚类,层次聚类优缺点 2020.11
[2] 聚类算法总结 - 优缺点对比 2019.8
[3] 聚类总结:分类、优缺点、适用场景总结 2020.5
[4] KMeans与深度学习自编码AutoEncoder结合提高聚类效果(python) 2022.7
[5] 【神经网络】自编码聚类算法–DEC (Deep Embedded Clustering) 2018.10
[6] 基于 AutoEncoder 的无监督聚类的实现 2020.3