[英]Compare how to how much percentage two label-vectors are the same
我有两种要比较的聚类方法。 我用一种方法将数据对象聚类,然后用另一种方法聚类,并为这两种方法标记对象。 现在,我想比较第二种方法与第一种方法标记数据对象的百分比。
我有带有两种类型标签的数据对象。 标签是没有任何内在含义的整数,只有具有相同标签(每种标签类型)的那些数据对象属于同一组。 我想知道两个标签的百分比相同。
例如(伪代码,其中==为元素方式):
>>> label1 = [1,1,1,1,2,2,2,3,3,3,3,3,4,4]
>>> label2 = [1,1,2,2,2,2,2,2,2,3,3,4,4,4]
>>> correctness = sum_of_true(label1 == label2) / 14
correctness: 9 / 14 = 0.6428571
但是,标签可能使用的方式不同。 例如
>>> label1 = [1,1,1,1,2,2,2,3,3,3,3,3,4,4]
>>> label2 = [2,2,2,2,1,1,1,4,4,4,4,4,3,3]
标记相同,正确性应为1.0
。
为此,我需要重命名label2,以使标签尽可能类似于label1。
一种低效的解决方案是简单地尝试在所有可能的解决方案中重命名label2
,为每个重命名正确性进行计算,如示例中的上述,并采用具有最佳正确性的解决方案。 但是,可能的重命名数量是标签数量的排列。 这可能是一个非常庞大的数字,并且使这种方法无法使用。
我知道标准化的互信息(nmi)作为比较标签的一种方法,但这不是我想要的。 原因是,首先,nmi不是线性的;其次,它难以理解和交流;其次,我只是想要其他东西;-)-在这种情况下,要知道相同标记数据对象的数量(〜百分比)。 我想要其他原因的原因与标签的后续应用有关。
所以举个例子
>>> label1 = [1,1,1,1]
>>> label2 = [1,2,3,4]
我仍然希望这是正确的1/4
。 我不想在这里讨论这是否明智。 在我以后的应用程序中,这就是我所需要的。
此外,还有一个问题,即对于label1
和label2
,标签的数量可能会有所不同。 对于我的应用程序,宽大地对待这一点可能会很有用,因为它允许将标签合并到任一侧。 例如
>>> label1 = [1,1,1,1]
>>> label2 = [1,2,3,4]
将成为正确性1
,如果是朝合并宽松label2
,而这将是0.5
的
>>> label1 = [1,1,2,2]
>>> label2 = [1,2,3,4]
如何有效地计算正确性
当然,对于2.和3.解决方案将是相同的。
有几种公认的方法可以评估两个聚类结果的相似性。 他们已经解决了对齐问题,如果簇数变化,对齐问题将变得更加严重。
您可能应该只使用其中之一,尤其是:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.