如何最好地对齐数据标签以进行比较

How to best align data labeling for comparison

我对相同的数据点有不同的标签 - 例如,使用 sklearn.cluster.KMeanssklearn.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]

之前回答过几次:

  1. 使用不需要标签的 ARI、NMI 等措施 "aligned",但比较分区而不是标签(标准
  2. 使用Hungarian algorithm找到最佳对齐方式(不常见,你仍然需要处理它们没有相同数量的情况集群)