如何计算聚类中的精度和召回率?
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/…以上是关于如何计算聚类中的精度和召回率?的主要内容,如果未能解决你的问题,请参考以下文章