首页 > 解决方案 > 如何最好地对齐数据标签以进行比较

问题描述

对于相同的数据点,我有不同的标签 - 例如,使用sklearn.cluster.KMeansand对数据进行聚类sklearn.cluster.AgglomerativeClustering,并获得一些不同的聚类。

我想看看这两种方法的结果的差异,但简单地比较每种方法下给出的每个数据点的簇数是不可能的,因为这些数字是任意给出的。

也就是说,即使在这两种制度下,许多数据点落在一个集群中,其中一个也会被编号,例如,“2”,而另一个“0”——除了指定不同的类别之外,这些数字毫无意义。
比较这些标签将(错误地)表明这两种方法在这些点上存在强烈的分歧,即使它们落在同一个集群中。

虽然我可以遍历一个标签列表的所有可能排列,并将每个选项与另一个列表的一致性进行比较(也就是说,交换一个列表中的标签,同时保持另一个列表相同),但选择最小的选项分歧的数量,我认为有一个更明智的选择,而且很可能 - 一个已经存在。

有任何想法吗?

聚类标签数据示例:

label_a= [1 1 5 2 2 2 3 3 2 2 3 2 2 2 2 3 2 3 2 2 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 4 4 4 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 3 4 4 2 4]

label_b=  [3 3 4 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 3 0 0 0 0 0 0 0 0 5 5 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 2]

标签: pythonscikit-learncluster-analysis

解决方案


正如之前多次回答的那样:

  1. 使用 ARI、NMI 等不需要标签“对齐”但比较分区而不是标签的度量(标准
  2. 使用匈牙利算法找到最佳对齐方式(不常见,您仍然必须处理它们没有相同数量的集群的情况)

推荐阅读