前言
实际工作中经常会用到一些聚类算法对一些数据进行聚类处理,如何评估每次聚类效果的好坏?可选的方法有1、根据一些聚类效果的指标来评估;2、直接打点。今天就主要总结下这段时间了解的聚类效果评估指标。废话少说,直接上干货。
针对数据有类别标签的情况
Adjusted Rand index (ARI)
优点:
1.1 对任意数量的聚类中心和样本数,随机聚类的ARI都非常接近于0;
1.2 取值在[-1,1]之间,负数代表结果不好,越接近于1越好;
1.3 可用于聚类算法之间的比较
缺点:
1.4 ARI需要真实标签
Mutual Information based scores (MI) 互信息
优点:除取值范围在[0,1]之间,其他同ARI;可用于聚类模型选择
缺点:需要先验知识
针对数据无类别标签的情况
对于无类标的情况,没有唯一的评价指标。对于数据凸分布的情况我们只能通过类内聚合度、类间低耦合的原则来作为指导思想。
轮廓系数(Silhouette Coefficient)
定义
轮廓系数(Silhouette Coefficient),是聚类效果好坏的一种评价方式。最早由 Peter J. Rousseeuw 在 1986 提出。它结合内聚度和分离度两种因素。可以用来在相同原始数据的基础上用来评价不同算法、或者算法不同运行方式对聚类结果所产生的影响。
原理
(1)计算样本i到同簇其他样本的平均距离ai。ai 越小,说明样本i越应该被聚类到该簇。将ai 称为样本i的簇内不相似度。某一个簇C中所有样本的a i 均值称为簇C的簇不相似度。
(2)计算样本i到其他某簇Cj 的所有样本的平均距离bij,称为样本i与簇Cj 的不相似度。定义为样本i的簇间不相似度:bi =min{bi1, bi2, …, bik},即某一个样本的簇间不相似度为该样本到所有其他簇的所有样本的平均距离中最小的那一个。
bi越大,说明样本i越不属于其他簇。
(3)根据样本i的簇内不相似度a i 和簇间不相似度b i ,定义某一个样本样本i的轮廓系数:
样例图:
如上图所示,最终整个数据的轮廓系数=每个样本轮廓系数之和/n(即所有样本轮廓系数的平均值)
(4)判断:
si接近1,则说明样本i聚类合理;
si接近-1,则说明样本i更应该分类到另外的簇;
若si 近似为0,则说明样本i在两个簇的边界上。
(5) 所有样本的轮廓系数S
所有样本的s i 的均值称为聚类结果的轮廓系数,定义为S,是该聚类是否合理、有效的度量。聚类结果的轮廓系数的取值在【-1,1】之间,值越大,说明同类样本相距约近,不同样本相距越远,则聚类效果越好。
优缺点总结
优点:
对于不正确的 clustering (聚类),分数为 -1 , highly dense clustering (高密度聚类)为 +1 。零点附近的分数表示 overlapping clusters (重叠的聚类)。
当 clusters (簇)密集且分离较好时,分数更高,这与 cluster (簇)的标准概念有关。
缺点:
convex clusters(凸的簇)的 Silhouette Coefficient 通常比其他类型的 cluster (簇)更高,例如通过 DBSCAN 获得的基于密度的 cluster(簇)。不适用与基于密度的算法。
使用:
sklearn中的接口
轮廓系数以及其他的评价函数都定义在sklearn.metrics模块中,
在sklearn中函数silhouette_score()计算所有点的平均轮廓系数,而silhouette_samples()返回每个点的轮廓系数。后面会给出具体的例子的。它的定义如下:
def silhouette_score(X, labels, metric='euclidean', sample_size=None,
random_state=None, **kwds):
'''
X:表示要聚类的样本数据,一般形如(samples,features)的格式
labels:即聚类之后得到的label标签,形如(samples,)的格式
metric:默认是欧氏距离
'''
CH分数(Calinski Harabasz Score )
原理:
也称之为 Calinski-Harabaz Index
分数S被定义为簇间离散与簇内离散的比率,是通过评估类之间方差和类内方差来计算得分。该分值越大说明聚类效果越好
其中k代表聚类类别数,N代表全部数据数目。
n是样本点数,cq是在聚类q中的样本点,Cq是在聚类q中的中心点,nq是聚类q中的样本点数量,c是E的中心(E是所有的数据集)
trace只考虑了矩阵对角上的元素,即类q中所有数据点到类q中心点的欧几里得距离。
类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。 总结起来一句话:CH index的数值越大越好。
在真实的分群label不知道的情况下,可以作为评估模型的一个指标。 同时,数值越小可以理解为:组间协方差很小,组与组之间界限不明显。
与轮廓系数的对比,最大的优势:快!相差几百倍!毫秒级(原因:可能是计算簇间,簇内不相似度对应的数据量和计算复杂度不同。CH有中心点,只需要计算簇内点到中心点的距离即可,簇间有整个样本的中点,只需要计算各簇中心点到整个样本的中心点即可;而轮廓系数则需要在簇内计算样本i到同簇其他所有样本的平均距离等。一个是固定中心点计算,一个是没有中心点,计算所有的样本点距离。)
优缺点总结
优点
当 cluster (簇)密集且分离较好时,分数更高,这与一个标准的 cluster(簇)有关。
得分计算很快。
缺点
凸的簇的 Calinski-Harabaz index(Calinski-Harabaz 指数)通常高于其他类型的 cluster(簇),例如通过 DBSCAN 获得的基于密度的 cluster(簇)。
使用
在sklearn中的接口
在scikit-learn中, Calinski-Harabasz Index对应的方法是metrics.calinski_harabaz_score. 它的定义如下:
def calinski_harabasz_score(X, labels):
'''
X:表示要聚类的样本数据,一般形如(samples,features)的格式
labels:即聚类之后得到的label标签,形如(samples,)的格式
戴维森堡丁指数(DBI)——davies_bouldin_score
定义
戴维森堡丁指数(DBI),又称为分类适确性指标,是由大卫L·戴维斯和唐纳德·Bouldin提出的一种评估聚类算法优劣的指标
原理
DB计算任意两类别的类内距离平均距离(CP)之和除以两聚类中心距离求最大值。DB越小意味着类内距离越小同时类间距离越大
缺点:因使用欧式距离 所以对于环状分布 聚类评测很差
分子:簇内所有点到该簇质心点的平均距离之和
分母d(ci,cj):两类别质心间的距离
max()最大值部分:选取每组比例中的最大值(即选取最糟糕的一组)
1/n求和部分:将所选比例加和除以类别数
结果意义:DB值越小表示聚类结果同簇内部紧密,不同簇分离较远。即类内距离越小,类间距离越大。
实例
具体过程:
step1:计算每个聚类d(A),d(B),d©的平均内部距离。
step2:计算任意质心间的距离d(A,B),d(A,C)和d(B,C)。
step3:返回最大比例(任意内部聚类之和与其质心间距之比)
注意:DBI的值最小是0,值越小,代表聚类效果越好。
使用
DBI的sklearn中的定义:
def davies_bouldin_score(X, labels):
'''
X:表示要聚类的样本数据,一般形如(samples,features)的格式
labels:即聚类之后得到的label标签,形如(samples,)的格式
Compactness(紧密性)(CP)
CP计算每一个类各点到聚类中心的平均距离CP越低意味着类内聚类距离越近。著名的 K-Means 聚类算法就是基于此思想提出的。
缺点:没有考虑类间效果
Separation(间隔性)(SP)
SP计算 各聚类中心两两之间平均距离,SP越高意味类间聚类距离越远
缺点:没有考虑类内效果
Dunn Validity Index (邓恩指数)(DVI)
DVI计算任意两个簇元素的最短距离(类间)除以任意簇中的最大距离(类内)。 DVI越大意味着类间距离越大同时类内距离越小
缺点:对离散点的聚类测评很高、对环状分布测评效果差
其他
其他的一些指标如:均一性(一个簇中只包含一个类别)和完整性(同类别被分到同簇中)就类似于之前半监督中的准确率和召回率。
V-measure:均一性和完整性的加权平均
两个指标用来衡量分类效果:即ARI就相当于之前的F1,Fβ
总结
常用的聚类指标可能就是轮廓系数,CH分数,DBI等。针对不同的数据量,这些指标的计算效率会有差距。若数据量小都可以尝试使用,但要注意各个指标的使用场景。若数据量大则建议使用CH分数,实测该指标的计算效率的确很高,至于原因就如前文所描述的那样。