如何最好地对齐数据标签以进行比较
How to best align data labeling for comparison
我对相同的数据点有不同的标签 -
例如,使用 sklearn.cluster.KMeans
和 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]
之前回答过几次:
- 使用不需要标签的 ARI、NMI 等措施 "aligned",但比较分区而不是标签(标准)
- 使用Hungarian algorithm找到最佳对齐方式(不常见,你仍然需要处理它们没有相同数量的情况集群)
我对相同的数据点有不同的标签 -
例如,使用 sklearn.cluster.KMeans
和 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]
之前回答过几次:
- 使用不需要标签的 ARI、NMI 等措施 "aligned",但比较分区而不是标签(标准)
- 使用Hungarian algorithm找到最佳对齐方式(不常见,你仍然需要处理它们没有相同数量的情况集群)