十分钟掌握聚类算法的评估指标

简介: 前言聚类算法属于非监督学习,它并不像分类算法那样可以使用训练集或测试集中的数据来计算准确率、召回率等。那么如何评估聚类算法得好坏呢?好的聚类算法,一般要求类簇具有:簇内 (intra-cluster) 相似度高簇间 (inter-cluster) 相似度底一般来说,评估聚类质量有两个标准,内部评估评价指标和外部评估指标。

内部评估的方法


内部评估指标主要基于数据集的集合结构信息从紧致性、分离性、连通性和重叠度等方面对聚类划分进行评价。即基于数据聚类自身进行评估的。

轮廓系数(Silhouette Coefficient)

轮廓系数适用于实际类别信息未知的情况。旨在将某个对象与自己的簇的相似程度和与其他簇的相似程度作比较。

对于单个样本,设a是与它同类别中其他样本的平均距离,b是与它距离最近不同类别中样本的平均距离,其轮廓系数为:

s=b−amax(a,b)s = \frac {b-a} {max(a, b)}s=max(a,b)ba

对于一个样本集合,它的轮廓系数是所有样本轮廓系数的平均值。

轮廓系数的取值范围是[-1,1],同类别样本距离越相近,不同类别样本距离越远,值越大。当值为负数时,说明聚类效果很差。

缺点

不适合基于密度的聚类算法(DBSCAN)。

Calinski-Harabaz指数(Calinski-Harabaz Index)

在真实的分群label不知道的情况下,Calinski-Harabasz可以作为评估模型的一个指标。

Calinski-Harabasz指数通过计算类中各点与类中心的距离平方和来度量类内的紧密度,通过计算各类中心点与数据集中心点距离平方和来度量数据集的分离度,CH指标由分离度与紧密度的比值得到。从而,CH越大代表着类自身越紧密,类与类之间越分散,即更优的聚类结果。

优点

  • 当簇的密集且分离较好时,分数更高。
  • 得分计算很快,与轮廓系数的对比,最大的优势:快!相差几百倍!毫秒级。

缺点

  • 凸的簇的CH指数通常高于其他类型的簇。例如,通过 DBSCAN 获得基于密度的簇;所以,不适合基于密度的聚类算法(DBSCAN)。

戴维森堡丁指数(DBI, Davies-Bouldin Index)

DB指数是计算任意两类别的类内距离平均距离之和除以两聚类中心距离求最大值。DB越小,意味着类内距离越小同时类间距离越大。零是可能的最低值,接近零的值表示更好的分区。

其公式为:

Rij=si+sjdijR_{ij} = \frac {s_i+s_j} {d_{ij}}Rij=dijsi+sj

DB=1k∑i=1kmax⁡i≠jRijDB = \frac {1} {k} \sum_{i=1}^k{\max_{i \neq j} R_{ij}}DB=k1i=1ki=jmaxRij

其中,sis_isi表示簇的每个点与该簇的质心之间的平均距离,也称为簇直径。dijd_{ij}dij表示聚类i和j的质心之间的距离。

算法生成的聚类结果越是朝着簇内距离最小(类内相似性最大)和簇间距离最大(类间相似性最小)变化,那么Davies-Bouldin指数就会越小。

缺点:

  • 因使用欧式距离,所以对于环状分布聚类评测很差。


外部评估的方法


外部有效指标是指当数据集的外部信息可用时,通过比较聚类划分与外部准则的匹配度,可以评价不同聚类算法的性能。即通过将聚类结果与已经有“ground truth”分类进行对比。

要么通过人进行手动评估,要么通过一些指标在特定的应用场景中进行聚类用法的评估。

不过该方法是有问题的,如果真的有了label,那么还需要聚类干嘛,而且实际应用中,往往都没label;另一方面,这些label只反映了数据集的一个可能的划分方法,它并不能告诉你存在一个不同的更好的聚类算法。


兰德指数(RI, Rand index)

兰德指数是将聚类看成是一系列的决策过程,即对文档集上所有 N(N−1)/2N(N-1)/2N(N1)/2 个【文档对】进行决策。当且仅当两篇文档相似时,我们将它们归入同一簇中。

正确决策:

  • TP 将两篇相似文档归入一个簇 (同 - 同)
  • TN 将两篇不相似的文档归入不同的簇 (不同 - 不同)

错误决策:

  • FP 将两篇不相似的文档归入同一簇 (不同 - 同)
  • FN 将两篇相似的文档归入不同簇 (同- 不同)

RI 则是计算「正确决策」的比率(精确率, accuracy)。

其公式为:

RI=a+bC2nsamples=TP+TNTP+TN+FP+FN=TP+TNC2nsamples\text{RI} = \frac{a + b}{C_2^{n_{samples}}} = \frac {TP+TN} {TP + TN + FP + FN} = \frac {TP+TN} {C_2^{n_{samples}}}RI=C2nsamplesa+b=TP+TN+FP+FNTP+TN=C2nsamplesTP+TN

其中,C表示实际类别信息,K表示聚类结果,a表示在C与K中都是同类别的元素对数,b表示在C与K中都是不同类别的元素对数,C2nsamplesC_2^{n_{samples}}C2nsamples 表示数据集中可以组成的对数。

RI取值范围为[0,1],值越大意味着聚类结果与真实情况越吻合。

调整兰德系数(Adjusted Rand index)

对于随机结果,RI并不能保证分数接近零。为了实现“在聚类结果随机产生的情况下,指标应该接近零”,调整兰德系数(Adjusted rand index)被提出,它具有更高的区分度。

其公式为:

ARI=RI−E[RI]max⁡(RI)−E[RI]\text{ARI} = \frac{\text{RI} - E[\text{RI}]}{\max(\text{RI}) - E[\text{RI}]}ARI=max(RI)E[RI]RIE[RI]

ARI取值范围为[-1,1],值越大意味着聚类结果与真实情况越吻合。从广义的角度来讲,ARI衡量的是两个数据分布的吻合程度。

优点:

  • 对任意数量的聚类中心和样本数,随机聚类的ARI都非常接近于0。
  • 取值在[-1,1]之间,负数代表结果不好,越接近于1越好。
  • 对簇的结构不需作出任何假设:可以用于比较聚类算法。。

缺点:

  • ARI 需要 ground truth classes 的相关知识,ARI需要真实标签,而在实践中几乎不可用,或者需要人工标注者手动分配(如在监督学习环境中)。


标准化互信息(NMI, Normalized Mutual Information)


互信息是用来衡量两个数据分布的吻合程度。它也是一有用的信息度量,它是指两个事件集合之间的相关性。互信息越大,词条和类别的相关程度也越大。

假设U与V是对N个样本标签的分配情况,则两种分布的熵(熵表示的是不确定程度)分别为:

H(U)=−∑i=1∣U∣P(i)log⁡(P(i))H(U) = - \sum_{i=1}^{|U|}P(i)\log(P(i))H(U)=i=1UP(i)log(P(i))

H(V)=−∑j=1∣V∣P′(j)log⁡(P′(j))H(V) = - \sum_{j=1}^{|V|}P'(j)\log(P'(j))H(V)=j=1VP(j)log(P(j))

U与V之间的互信息的表达式为:

MI(U,V)=∑i=1∣U∣∑j=1∣V∣P(i,j)log⁡(P(i,j)P(i)P′(j))\text{MI}(U, V) = \sum_{i=1}^{|U|}\sum_{j=1}^{|V|}P(i, j)\log\left(\frac{P(i,j)}{P(i)P'(j)}\right)MI(U,V)=i=1Uj=1VP(i,j)log(P(i)P(j)P(i,j))

其中,P(i,j)=∣Ui∩Vj∣/NP(i, j) = |U_i \cap V_j| / NP(i,j)=UiVj/N是随机选取的对象同时属于 UiU_i Ui类和 VjV_jVj 类的概率。

它也可以用集合基数公式表示:

MI(U,V)=∑i=1∣U∣∑j=1∣V∣∣Ui∩Vj∣Nlog⁡(N∣Ui∩Vj∣∣Ui∣∣Vj∣)\text{MI}(U, V) = \sum_{i=1}^{|U|} \sum_{j=1}^{|V|} \frac{|U_i \cap V_j|}{N}\log\left(\frac{N|U_i \cap V_j|}{|U_i||V_j|}\right)MI(U,V)=i=1Uj=1VNUiVjlog(UiVjNUiVj)

标准互信息的表达式为:

NMI(U,V)=MI(U,V)mean(H(U),H(V))\text{NMI}(U, V) = \frac{\text{MI}(U, V)}{\text{mean}(H(U), H(V))}NMI(U,V)=mean(H(U),H(V))MI(U,V)

利用基于互信息的方法来衡量聚类效果需要实际类别信息,MI与NMI取值范围为[0,1],它们都是值越大意味着聚类结果与真实情况越吻合。

调整互信息(AMI, Adjusted mutual information)

调整后的互信息是对互信息评分的进行调整。

它考虑到对于具有更大数量的聚类群,通常MI较高,而不管实际上是否有更多的信息共享,它通过调整聚类群的概率来纠正这种影响。

其表达式为:

AMI=MI−E[MI]mean(H(U),H(V))−E[MI]\text{AMI} = \frac{\text{MI} - E[\text{MI}]}{\text{mean}(H(U), H(V)) - E[\text{MI}]}AMI=mean(H(U),H(V))E[MI]MIE[MI]

AMI取值范围为[-1,1],它们都是值越大意味着聚类结果与真实情况越吻合。

当两个聚类集相同(即完全匹配)时,AMI返回值为1;随机分区(独立标签)平均预期AMI约为0,也可能为负数。


同质性度量和完整性度量的调和平均(V-measure)


两个指标:

  • 同质性(homogeneity):每个群集只包含单个类的成员。
  • 完整性(completeness):给定类的所有成员都分配给同一个群集。

V-measure是同质性homogeneity和完整性completeness的调和平均数。

其表达式为:

v=(1+β)×homogeneity×completeness(β×homogeneity+completeness)v = \frac{(1 + \beta) \times \text{homogeneity} \times \text{completeness}}{(\beta \times \text{homogeneity} + \text{completeness})}v=(β×homogeneity+completeness)(1+β)×homogeneity×completeness

V-measure取值范围为 [0,1],越大越好,但当样本量较小或聚类数据较多的情况,推荐使用AMI和ARI。


Fowlkes-Mallows Scores(FMI)


FMI是Precision(精度)和 Recall(召回)的几何平均数。取值范围为 [0,1],越接近1越好。

Recall(召回)和 Precision (精度),公式如下

Recall=TPTP+FNRecall = \frac {TP} {TP+FN}Recall=TP+FNTP

Precision=TPTP+FPPrecision = \frac {TP} {TP+FP}Precision=TP+FPTP

但是其中定义的 TP,FP,TN,FN 和常见的分类任务不太一样,具体定义如下:

  • TP:样本对在GT(真实值)中是一个蔟,同时在Pred(预测值)中也是一个蔟
  • FP:样本对在Pred中是一个蔟,但是在GT中不是一个蔟
  • FN:样本对在GT中是一个蔟,但是在Pred中不是一个蔟
  • TN:样本对在GT中不是一个蔟,同时在Pred中也不是一个蔟

对于总样本有 n 个的聚类任务,假如是 s1,...,sns_1,...,s_ns1,...,sn 那么可以组成 (n−1)∗n2\frac {(n-1)*n}{2}2(n1)n个样本对,即 Cn2 C_n^2Cn2,而 TP,FP,TN,FN 是定义这些样本对的基础上,在因此有下面的等式成立:

TP+FP+TN+FN=(n−1)∗n2 TP+FP+TN+FN = \frac {(n-1)*n}{2} TP+FP+TN+FN=2(n1)n

FMI的公式定义为:

FMI=TP(TP+FP)(TP+FN)FMI = \frac {TP} { \sqrt { (TP+FP)(TP+FN)}}FMI=(TP+FP)(TP+FN)TP


总结


一般情况下,主要是对无y值的数据进行聚类操作。如果在评价中用到外部指标,就需通过人工标注等方法获取y值,成本较高,因此内部指标的实际实用性更强。


相关文章
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
193 6
|
6月前
|
数据采集 机器学习/深度学习 算法
【优秀设计案例】基于K-Means聚类算法的球员数据聚类分析设计与实现
本文通过K-Means聚类算法对NBA球员数据进行聚类分析,旨在揭示球员间的相似性和差异性,为球队管理、战术决策和球员评估提供数据支持,并通过特征工程和结果可视化深入理解球员表现和潜力。
212 1
【优秀设计案例】基于K-Means聚类算法的球员数据聚类分析设计与实现
|
3月前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
4月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
109 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
4月前
|
算法 数据挖掘
基于粒子群优化算法的图象聚类识别matlab仿真
该程序基于粒子群优化(PSO)算法实现图像聚类识别,能识别0~9的数字图片。在MATLAB2017B环境下运行,通过特征提取、PSO优化找到最佳聚类中心,提高识别准确性。PSO模拟鸟群捕食行为,通过粒子间的协作优化搜索过程。程序包括图片读取、特征提取、聚类分析及结果展示等步骤,实现了高效的图像识别。
|
5月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
94 4
|
6月前
|
人工智能 算法 数据可视化
DBSCAN密度聚类算法(理论+图解+python代码)
DBSCAN密度聚类算法(理论+图解+python代码)
483 0
|
6月前
|
机器学习/深度学习 算法 搜索推荐
支付宝商业化广告算法问题之在DNN模型中,特征的重要性如何评估
支付宝商业化广告算法问题之在DNN模型中,特征的重要性如何评估
|
2天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。