聚类效果评估指标总结
前言
实际工作中经常会用到一些聚类算法对一些数据进行聚类处理,如何评估每次聚类效果的好坏?可选的方法有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分数,实测该指标的计算效率的确很高,至于原因就如前文所描述的那样。
聚类效果评估指标总结相关推荐
- spark聚类算法的聚类效果评估指标“轮廓系数”细节
什么是轮廓系数? 参见百度百科,讲的很清楚此处不赘述: https://baike.baidu.com/item/%E8%BD%AE%E5%BB%93%E7%B3%BB%E6%95%B0/173616 ...
- 聚类效果评估、内部指标(Jaccard系数、FM指数、Rand指数)、外部指标(DB指数、Dunn指数)、轮廓系数(Silhouette Coefficient)
聚类效果评估.内部指标(Jaccard系数.FM指数.Rand指数).外部指标(DB指数.Dunn指数).轮廓系数(Silhouette Coefficient) 目录
- 【Pytorch-从一团乱麻到入门】:3、模型效果评估指标:ROC、AUC、precision、recall
在构建模型中,我们经常会用到AUC.ROC等指标来进行模型效果评估 ROC全称是"受试者工作特征"(Receiver Operating Characteristic).ROC曲线 ...
- 模型效果评估指标(ROC、AUC/KS、Lift、PSI)
以二分类问题为例 混淆矩阵(Confusion Matrix) 对测试集数据进行预测,得到下列混淆矩阵中的数据 注:TP.FN.FP.TN以预测的结果是否准确来命名. 预测模型评估指标的本质是从模型预 ...
- 机器学习之聚类算法——聚类效果评估可视化
我曾在机器学习之聚类算法应用篇中介绍过,聚类算法常使用轮廓系数来评估聚类效果,不过有时候并不是轮廓系数越大越好,如下面两幅图所示,图中的红色虚线表示聚类系数分数: 显然将簇数据设置为2的时候得到的轮廓 ...
- 聚类效果评估——轮廓系数(Silhouette Coefficient)附Python代码
轮廓系数 前言 是什么? 为什么? 由此可得: 怎么用? 不适用 示例 前言 在机器学习中,无监督学习算法中聚类算法算作相对重要的一部分算法.也常在低资源和无标注的情况下使用. 其中KMeans作为聚 ...
- 【总结】分类、聚类的评估指标
1. 分类问题评价指标 1-1. 精确率与召回率 精确率(Precision)指的是模型判为正的所有样本中有多少是真正的正样本:召回率(Recall)指的是所有正样本有多少被模型判为正样本,即召回.感 ...
- 【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法及聚类效果评估
无监督学习: [机器学习]使用scikitLearn对数据进行聚类:Kmeans聚类算法的应用及密度聚类DBSCAN [机器学习]使用scikitLearn对数据进行聚类:高斯聚类GaussianMi ...
- 【Pytorch-从一团乱麻到入门】:4、模型效果评估指标:ROC-AUC、PR-AUC及可能遇到的问题(1)
1.ROC-AUC 和PR-AUC定义 AUC: 随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率. ROC-AUC ...
最新文章
- 为什么我们使用Linux内核的(网络)协议栈?
- datetime数据类型_系统数据类型
- S/4 HANA – 是ERP皇帝的新装,还是SAP王国的新基石
- WINHEX的比较、同步功能加上NTFS对稀疏文件的支持
- 批量将PPM格式图片转化为JPG格式
- win7开启ftp被动模式_FTP服务器在Linux系统上的搭建
- 语法糖----C#的async和await
- 全国计算机比赛微课视频,“教学之星”全国总决赛 | 冠军朱琦微课及现场比赛视频...
- json rpgmv 加密_【RPG Maker MV插件编程】【实例教程6】存档的加密解密与保护
- springboot对JPA的支持
- java-word模板导出
- X86、X64和X86_64区别
- shell中大于号和小于号
- 每分钟54万多条数据更新,商品系统性能如何优化?
- python数字华容道算法_用React写一个数字华容道,你需要知道的秘密
- BZOJ3387栅栏(另一种解法:spfa)
- Babel 学习日记(0)
- 使用AW9523B芯片驱动16路LED时,LED出现误点亮的问题
- 弱校联萌十一大决战之如日中天A	Ariel【二进制+排序】
- 洗牌——114514
热门文章
- 个人工作13年的一些人生真实领悟
- 图像、帧、片、NALU(firstime)
- 解决 Unable to translate SQLException with Error code ‘17059‘, will now try the fallback translator
- 如何高效的编写与同步博客 (.NET Core 小工具实现)
- Swift标识符和关键字
- 数学图形(1.35)Kappa curve
- [恢]hdu 1239
- 测试一体机ASM failgroup的相关问题处理
- 从Android源码的角度分析Binder机制
- 浅谈面向对象的javascript几个特性