概述
▶ 常用的聚类方法
核心思想 | 常见算法 | |
---|---|---|
划分聚类 | 将给定的数据集,采用分裂法划分为K个类 | K-Means, CLARANS |
层级聚类 | 根据数据点之间的相似度创建一颗有层次的树 | Agglomerative(聚合), Divisive(分裂) |
密度聚类 | 当一片区域内的数据点的密度大于某个阀值,则认为它们是一类 | DBSCAN, OPTICS |
▶ 常用的距离函数(理解)
欧式距离 | 即自然距离 |
余弦距离 | 余弦相似度,是通过计算两个向量的夹角余弦值来评估他们的相似度 |
编辑距离 | 即码距,两个字符串至少需要多少次的处理才能将一个字符串变成另一个字符串 |
海明距离 | 两个等长字符串对应位置的不同字符的个数 |
皮尔逊距离 | 度量两个变量之间的差异性 |
杰卡德距离 | 度量两个集合之间的差异性 |
▶ 常用的距离函数(速查)
欧式距离 | euclidean |
标准化欧式距离 | seuclidean |
曼哈顿距离 | manhattan |
切比雪夫距离 | chebyshev |
闵可夫斯基距离 | minkowski |
带权重的闵可夫斯基距离 | wminkowski |
马氏距离 | mahalanobis |
K-Means聚类
▶ 算法流程
- 随机选出(或人工选出)k个初始中心数据点——即k个类
- 剩下的数据点根据距离大小划分到距离最近的类中
- 根据聚类结果,重新选出k个类各自的中心(质心)
- 根据新的质心再次分类(划分的聚类结果可能有所变化)
- 不断重复上述过程,直到聚类结果不再发生变化
▶ 评价
- 优:算法简单,容易实现(至少相比于其他聚类算法确实算是简单…)
- 缺:在大规模数据集上收敛较慢;在不断取平均值找新的质心的过程中,受孤立点的影响较大
▶ 改进
- 每次找的质心,不一定是数据点——这对于有些任务来说是不符合要求的。基于K-Means算法改进出的 K-medoids算法 可以保证每一步计算的质心都是数据点
- 但是K-medoids算法的时间复杂度仍旧非常高。为了适应大规模数据集,后续又提出了 CLARANS算法
Agglomerative聚类
▶ 算法流程
- 现将数据集的每个点看作一类,得到N类(有点并差集的意味,体会一下)
- 距离最近的两个类合并成一类——删除两个旧类,生成一个新类
- 重复进行第2步,最终全部合并为一个类——一棵聚类树就生成了!
▶ 评价
- 优:得到了一整棵聚类树之后,想要分多少类,都能直接根据树的结构得到结果
- 缺:计算量较大,因为每次都要计算多个“两个类之间的距离”
▶ 补充
- 聚类树自下向上聚合 —— Agglomerative
- 聚类树自上向下分裂 —— Divisive
DBSCAN聚类
▶ 名称解释:Density-Based Spatial Clustering of Applications with Noise,基于密度的聚类算法
▶ 算法流程
- 对于每个数据点,做以Eps为半径的圆
- 如果圆内的点的个数高于阈值MinPts,则称该点为高密度的点,或者核心点
- 如果圆内的点的个数少于阈值MinPts,则称该点为低密度的点,或者离群点
- 对于核心点的圈,圈内的点连成链路,即为一类;对于离群点,不去理会
▶ 评价
- 优:能分辨噪声;速度较快,可用于大规模数据集;Eps和MinPts固定后,聚类结果也稳定下来
- 缺:数据点的密度特性不是很好时,DBSCAN聚类的效果也一般
聚类效果的评估
兰德指数(Rand Index, RI) | [ 0 , 1 ] [0, 1] [0,1] |
调节的兰德指数(Adjusted Rand Index, ARI) | [ − 1 , 1 ] [-1, 1] [−1,1] |
轮廓系数(Silhouette Coefficient, SC) | [ − 1 , 1 ] [-1, 1] [−1,1] |
注:
- 兰德指数RI(包括ARI)在评估时需要知道真实的分类标签
- 轮廓系数在评估时不需要正确的标签