聚类效果评估指标总结

前言

实际工作中经常会用到一些聚类算法对一些数据进行聚类处理,如何评估每次聚类效果的好坏?可选的方法有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分数,实测该指标的计算效率的确很高,至于原因就如前文所描述的那样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

{%extends bootstrap/base.html%}的添加,使得其他block无法继承

仙说{%extends "bootstrap/base.html"%}用法: 在base.html中调用一次即可,并且 {%extends "bootstrap/base.html"%} 要放在 最后头!!最后头!最后头! base中不用再添加 {% block cont…

运用Nginx代理和UWSGI将Flask项目部署在Linux中 详细步骤

nginx: 安装可以参照的路径: http://nginx.org/en/linux_packages.html#Ubuntu 启动Nginx nginx [ -c configpath] 默认配置目录:/etc/nginx/nginx.conf 查看进程: ps -ef |grep nginx 控制Nginx nginx -s xxxstop 快速关闭quit …

机器学习算法之KNN

前言 KNN一般用于有监督的分类场景,除此之外,KNN在异常检测场景中也有应用,下面主要介绍下KNN在这两面的应用原理。 KNN做分类的原理 计算步骤如下: 1)算距离:给定测试对象,计算它与训练集中…

Supermap 组合单值专题图与标签专题图演示样例

效果图例如以下&#xff1a;单值专题图并显示每一个区域的相关文字信息 代码&#xff1a; <!DOCTYPE> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>单值专题图</title>…

[剑指Offer] 25.复杂链表的复制

1 /*2 struct RandomListNode {3 int label;4 struct RandomListNode *next, *random;5 RandomListNode(int x) :6 label(x), next(NULL), random(NULL) {7 }8 };9 */ 10 class Solution 11 { 12 public: 13 //在旧链表中创建新链表&#xff0…

Flask项目中应用七牛云存储

七牛云存储&#xff1a; https://developer.qiniu.com/kodo/sdk/1242/python 点击注册开通七牛开发者帐号 如果已有账号&#xff0c;直接登录七牛开发者后台&#xff0c;点击这里查看 Access Key 和 Secret Key pip install qiniu q Auth(Access Key,Secret Key) b…

异常检测算法之IForest

前言 IForest即孤立森林&#xff0c;可以用于做异常检测。一句话总结IForest做异常检测的原理&#xff1a;异常点密度小&#xff0c;基于树模型容易被一下切割出来&#xff0c;正常值密度大&#xff0c;需要切割多次才能得到目标值。 原理 iForest算法得益于随机森林的思想&…

用c#编写爬虫在marinetraffic下载船仅仅图片

近期在做船仅仅识别方面的事情&#xff0c;须要大量的正样本来训练adaboost分类器。于是到marinetraffic这个站点上下载船仅仅图片。写个爬虫来自己主动下载显然非常方便。 站点特点 在介绍爬虫之前首先了解一下marinetraffic这个站点的一些特点&#xff1a; 1. 会定期检測爬虫…

异常检测算法之LOF

前言&#xff1a; LOF&#xff1a;Local outlier factor&#xff0c;即局部异常因子。LOF主要是通过比较每个点p和其邻域点的密度来判断该点是否为异常点&#xff0c;如果点p的密度越低&#xff0c;越可能被认定是异常点。至于密度&#xff0c;是通过点之间的距离来计算的&…

Android属性动画进阶用法

2019独角兽企业重金招聘Python工程师标准>>> 在上周二文章中介绍补间动画缺点的时候有提到过&#xff0c;补间动画是只能对View对象进行动画操作的。而属性动画就不再受这个限制&#xff0c;它可以对任意对象进行动画操作。那么大家应该还记得之前我举的一个例子&am…

5.3linux下C语言socket网络编程简例

原创文章&#xff0c;转载请注明转载字样和出处&#xff0c;谢谢&#xff01; 这里给出在Linux下的简单socket网络编程的实例&#xff0c;使用tcp协议进行通信&#xff0c;服务端进行监听&#xff0c;在收到客户端的连接后&#xff0c;发送数据给客户端&#xff1b;客户端在接受…

异常检测算法之HBOS

前言 HBOS&#xff08;Histogram-based Outlier Score&#xff09;核心思想&#xff1a;将样本按照特征分成多个区间&#xff0c;样本数少的区间是异常值的概率大。 原理 该方法为每一个样本进行异常评分&#xff0c;评分越高越可能是异常点。评分模型为&#xff1a; 假设样…

字典和json 的区别 和转换

前言&#xff1a;字典和json非常像。接下来比较一下两者的异同 先看一下字典的写法&#xff1a; a {a:1,b:2,c:3} 再看一下json的写法&#xff1a; {"studentInfo":{"id":123456,"stu_name":"Dorra"} } 从形式上看&#xff0c;都是…

easyui动态显示和隐藏表头

为什么80%的码农都做不了架构师&#xff1f;>>> var _bt{date:日期,subtime:填写时间,xz:小组,uname:操作人,qdbh:渠道编号,mt:媒体,zh:账户,sjd:时间段,tfwz:投放位置,tfh:投放号,td:团队,sjje:实际金额,jxs:进线数,cb:成本,yxzyjx:有效资源进线,yxzyl:有效资源率…

物联网

如果要说未来什么技术正在或将彻底改变人类生活、工作和娱乐的方式&#xff0c;那必须是物联网。小到各种可穿戴产品&#xff0c;大到汽车、工厂和楼宇&#xff0c;物联网能使一切设备互联并具备智慧。物联网也正改变着产业的格局&#xff0c;索尼、夏普、东芝等日本传统电子设…

Postico —— OS X 上的免费 PostgreSQL 客户端

Postico 是 OS X 下的一个 PostgreSQL 客户端管理工具。要求 OS X 10.8 或者更新版本。 文章转载自 开源中国社区 [http://www.oschina.net]

hdu 1760 A New Tetris Game(搜索博弈)

题目链接&#xff1a;hdu 1760 A New Tetris Game 题意&#xff1a; 给你一个矩阵&#xff0c;0表示可以放格子&#xff0c;现在给你2*2的格子&#xff0c;lele先放&#xff0c;问是否能赢。 题解&#xff1a; 爆搜。具体看代码 1 #include<bits/stdc.h>2 #define F(i,a,…

flask-restful接口

同flask一样&#xff0c;flask-restful同样支持返回任一迭代器&#xff0c;它将会被转换成一个包含原始 Flask 响应对象的响应&#xff1a; class ArticleApi(Resource):def get(self):return {"hello":"world"},201&#xff0c;{"course":&quo…

Django中的F对象和Q对象

F对象 可以获取到自己的属性值实现自己的属性自己的属性关联的复杂条件支持运算 Q对象 Q对象实际上是对条件的一个封装封装后支持逻辑运算与或非 &|~ 支持嵌套 例子 from django.db.models import Max, Avg, F, Q from django.http import HttpResponse from django.s…

Django模型关系

模型关系 1:1 一对一 &#xff08;一个身份证对应一个驾照&#xff09; 是使用外键唯一约束实现的对应最多只能有一个我们通常会在从表中声明关系 主表&#xff0c;从表 主表数据删除&#xff0c;从表数据级联删除从表数据删除&#xff0c;主表不受影响谁声明关系&#xff0c…