聚类学习
一、聚类基础
1. 定义
聚类(Clustering)是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。也即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。
2. 一般过程
- 数据准备:特征标准化和降维
- 特征选择:从最初的特征中选择最有效的特征,并将其存储在向量中
- 特征提取:通过对选择的特征进行转换形成新的突出特征
- 聚类:基于某种距离函数进行相似度度量,获取簇
- 聚类结果评估:分析聚类结果,如距离误差和(SSE)等
3. 度量方法
二、 kmeans
算法步骤
算法特点:
1. 初值敏感
-
K-means算法是初值敏感的,选择不同的初始值可能导致不同的簇划分规则。为了避免这种敏感性导致的最终结果异常性,可以采用初始化多套初始节点构造不同的分类规则,然后选择最优的构造规则。针对这点后面因此衍生了:二分K-Means算法、K-Means++算法、K-Means||算法、Canopy算法等。
-
初始点选择原则:
(1)k个点的距离尽可能远
(2)可以对数据先进行层次聚类,得到K个簇之后,从每个类簇中选择一个点,该点可以是该类簇的中心点,或者是距离类簇中心点最近的那个点。
2.需要提前确定K值
- k 值对最终结果的影响至关重要,而它却必须要预先给定。给定合适的 k 值,需要先验知识,凭空估计很困难,或者可能导致效果很差。## k值选取
1). 手肘法
手肘法的核心指标是SSE(sum of the squared errors,误差平方和):
- 其中,Ci是第i个簇,p是Ci中的样本点,mi是Ci的质心(Ci中所有样本的均值),SSE是所有样本的聚类误差,代表了聚类效果的好坏。
- 手肘法的核心思想是:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。
- 并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。
2). 轮廓系数法
该方法的核心指标是轮廓系数(Silhouette Coefficient),某个样本点Xi的轮廓系数定义如下:
- 其中,a是Xi与同簇的其他样本的平均距离,称为凝聚度,b是Xi与最近簇中所有样本的平均距离,称为分离度。而最近簇的定义是
- 其中p是某个簇Ck中的样本。事实上,简单点讲,就是用Xi到某个簇所有样本平均距离作为衡量该点到该簇的距离后,选择离Xi最近的一个簇作为最近簇。
- 求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。那么,很自然地,平均轮廓系数最大的k便是最佳聚类数。
3). Calinski-Harabaz指数
Calinski-Harabaz的分数S被定义为组间离散与组内离散的比率,该分值越大说明聚类效果越好。
- 其中 Bk 是组间离散矩阵, Wk 是组内离散矩阵:
- N 为数据中的点数,Cq 为 cluster (簇) q 中的点集, cq 为 cluster(簇) q 的中心, ce为 E 的中心, nq 为 cluster(簇) q 中的点数。
- 也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。
- 得分计算很快
4). Davies-Bouldin 指数
- Davies-Bouldin 表示集群之间的平均“相似度”,其定义为:
- Si表示聚类i中每个点之间的平均距离,dij表示聚类i,j的质心之间的距离,Rij定义相似性为:
- 其中相似度是将集群之间的距离与集群本身的大小进行比较的度量。零是可能的最低分。接近零的值表示更好的分区。
5). 其他
- Rand index、Mutual Information based scores、Homogeneity, completeness and V-measure、Fowlkes-Mallows scores、Fowlkes-Mallows scores等方法需要真实值。
3. 异常点敏感
- K-means算法在迭代的过程中使用所有点的均值作为新的质点(中心点),如果簇中存在异常点,将导致均值偏差比较严重。 比如一个簇中有2、4、6、8、100五个数据,那么新的质点为24,显然这个质点离绝大多数点都比较远;在当前情况下,使用中位数6可能比使用均值的想法更好,使用中位数的聚类方式叫做K-Mediods聚类(K中值聚类)。
优缺点
1. 优点
- 容易理解,聚类效果不错,虽然是局部最优, 但往往局部最优就够了;
- 处理大数据集的时候,该算法可以保证较好的伸缩性;
- 当簇近似高斯分布的时候,效果非常不错;
- 算法复杂度低。
2. 缺点
- K 值需要人为设定,不同 K 值得到的结果不一样;
- 对初始的簇中心敏感,不同选取方式会得到不同结果;
- 只能得到局部最优;
- 对异常值敏感;
- 样本只能归为一类,不适合多分类任务;
- 不适合太离散的分类、样本类别不平衡的分类、非凸形状的分类。
三、k-means++
- k-means++是针对k-means中初始质心点选取的优化算法。
- 该算法的流程和k-means类似,改变的地方只有初始质心的选取,该部分的算法流程如下:
四、DBSCAN
DBSCAN是一种基于密度聚类的算法。该算法的最大优点是可以将非球形簇实现恰到好处的聚类
算法步骤
例如:
算法特点
- 需要为算法指定eps和MinPts参数,这对分析人员是一个很大的挑战;
- 更适用于凹形状的分类
- DBSCAN聚类算法对参数eps和MinPts的设置是非常敏感的,如果指定不当,该算法将造成聚类质量的下降。
- 参考scikit中的函数
参考链接
https://zhuanlan.zhihu.com/p/104355127
https://blog.csdn.net/qq_15738501/article/details/79036255
https://zhuanlan.zhihu.com/p/47812841