如何计算聚类中的精度和召回率?

Posted

技术标签:

【中文标题】如何计算聚类中的精度和召回率?【英文标题】:How to compute precision and recall in clustering? 【发布时间】:2010-10-14 01:27:27 【问题描述】:

我真的很困惑如何在集群应用程序中计算精度和召回率。

我有以下情况:

给定两个集合 A 和 B。通过为每个元素使用唯一键,我可以确定 A 和 B 的哪些元素匹配。我想根据特征对这些元素进行聚类(当然不使用唯一键)。

我正在进行聚类,但我不确定如何计算精度和召回率。根据论文“Extended Performance Graphs for Cluster Retrieval”(http://staff.science.uva.nl/~nicu/publications/CVPR01_nies.pdf),公式为:

p = 精度 = 相关检索项目/检索项目和 r = 召回 = 相关检索项目/相关项目

我真的不知道哪些元素属于哪个类别。

到目前为止,我所做的是,我在集群中检查了我有多少匹配对(使用唯一键)。这已经是精确度或召回率之一了吗?如果是这样,它是哪一个,我如何计算另一个?

更新:我刚刚在http://mtg.upf.edu/files/publications/unsuperf.pdf 找到了另一篇题为“An F-Measure for Evaluation of Unsupervised Clustering with Non-Determined Number of Clusters”的论文。

【问题讨论】:

【参考方案1】:

精确度和召回率的问题在于,它们通常要求您了解“真实”标签是什么,而在许多情况下(以及在您的描述中)您不知道标签,但您知道要比较的分区。我建议调整后的兰德指数或许:

http://en.wikipedia.org/wiki/Rand_index

【讨论】:

【参考方案2】:

如果您将其中一组(例如 A)视为黄金聚类,而将另一组 (B) 视为聚类过程的输出,则(精确)精度和召回值可以估计为:

精度 =(A 和 B 共有的元素数)/(B 中的元素数)

召回率 =(A 和 B 共有的元素数)/(A 中的元素数)

也可以根据这些标准 F 度量来估计。

【讨论】:

没那么容易。 A 和 B 是数据集的不同分区,而不是单独的部分。所以通常,A 和 B 都只包含完整的数据集。因此,您不能使用 元素。您可以做的是使用所有 pairs 对象,其中当且仅当两个元素都在 same 集群中时,一对对象存在于集群中。【参考方案3】:

在我在访问聚类方法方面所做的一些研究中,我一直在使用其他几种聚类有效性度量。如果您有一个标有类(监督聚类)的数据集,您可以使用上面提到的精度和召回率,或者纯度和熵。

一个簇的纯度=最频繁类的出现次数/簇的大小(这个应该很高)

集群的熵 = 衡量类在集群中的分散程度(应该很低)

如果您没有类别标签(无监督聚类),则内部和内部相似性是很好的衡量标准。

单个集群的集群内相似度 = 集群内所有对的平均余弦相似度(这应该很高)

单个集群的集群间相似度 = 一个集群中所有项目与其他集群中所有项目相比的平均余弦 sim(这应该很低)

本文对所有这四种措施都有很好的描述。 http://glaros.dtc.umn.edu/gkhome/fetch/papers/edcICAIL05.pdf

与无监督 F-measure 的链接很好,我现在正在研究。

【讨论】:

这真的是“无监督 F 度量”,还是仅用于评估无监督聚类的“监督 F 度量”(需要计算基础事实)?【参考方案4】:

有关评估聚类算法的方法,请参阅“信息检索简介”第 18 章(胖聚类)。 http://nlp.stanford.edu/IR-book/html/htmledition/flat-clustering-1.html

本书的这一部分也可能很有用,因为它讨论了精度和召回等指标: http://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-unranked-retrieval-sets-1.html

【讨论】:

回答你也可以检查这个问题吗? ***.com/questions/32404742/…【参考方案5】:

我对这个问题的看法是:

集合 A 和 B 中的一个是“正”集合。假设 A 是正数

考虑到集群中 A 的一个元素

    B 的匹配元素在同一个簇中。这是一个真正的积极因素 B 的匹配元素不在同一个簇中。这是一个假阴性 B 的不匹配元素在同一个簇中。是误报 B 的不匹配元素不在同一个簇中。 is 是一个真正的否定。

那就用

精度 = 真阳性 /(真阳性 + 假阳性)

召回 = 真阳性 /(真阳性 + 假阴性) 有人提到过

【讨论】:

【参考方案6】:

我想你会发现***有一个很有帮助的 article on precision and recall。简而言之:

精度 = 真阳性 /(真阳性 + 假阳性)

召回 = 真阳性 /(真阳性 + 假阴性)

【讨论】:

【参考方案7】:

我认为你的定义有问题。

精确度和召回率适用于分类问题,分类问题基本上是两簇问题。如果您聚集成“好项目”(=检索到的项目)和“坏项目”(=未检索到的项目)之类的东西,那么您的定义将是有意义的。

在您的情况下,您计算了所有项目中正确聚类的百分比,这有点像精度,但不是真的,因为正如我所说的定义不适用。

【讨论】:

你也可以检查一下这个问题吗? ***.com/questions/32404742/…

以上是关于如何计算聚类中的精度和召回率?的主要内容,如果未能解决你的问题,请参考以下文章

精度评定中的准确率(Precision)和召回率(Recall)

如何计算两个嵌套数组的精度和召回率 [关闭]

计算精度和召回率

python实现计算精度召回率和F1值

如何在 Keras 中计算精度和召回率

如何从 Python 中的混淆矩阵中获取精度、召回率和 f 度量 [重复]