python - 如何最好地对齐数据标签以进行比较
问题描述
对于相同的数据点,我有不同的标签 - 例如,使用sklearn.cluster.KMeans
and对数据进行聚类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 等不需要标签“对齐”但比较分区而不是标签的度量(标准)
- 使用匈牙利算法找到最佳对齐方式(不常见,您仍然必须处理它们没有相同数量的集群的情况)
推荐阅读
- json - 无法在 Angular 中显示来自 JSON API 的图像
- syntax - 这是什么 Visual Basic 语法(开始/结束,无类)?
- reactjs - React Native:如何聚焦包装在自定义组件中的 TextInput?
- sql - SQL:合并结果
- python - 检测图像中的水平线
- hadoop - 如何在 Hive 中创建 Fact 表并用键(id)值替换表中的原始值
- python - Python子进程正确的异常处理
- node.js - ffprobe 可以使用管道 ffmpeg 输出吗?
- database - 阅读和处理数以百万计的文件
- visual-studio-code - 有没有办法阻止 VS 代码在行尾修剪空格?