python - sklearn k 表示集群标签与地面实况标签
问题描述
我正在尝试学习sklearn。正如我从以下示例的第 5 步中了解到的那样,预测的集群可能会被错误标记,我需要正确地重新标记它们。这也在sci-kit 的示例中完成。必须重新分配标签,以便聚类的结果和地面实况按颜色匹配。
我如何知道预测集群的标签是否与初始数据标签匹配,以及如何重新调整标签的索引以正确匹配两组?
解决方案
使用聚类,聚类之间没有有意义的顺序或比较,我们只是在寻找具有共同点的观察组。没有理由将一个集群称为“蓝色集群”与“红色集群”(除非您对该领域有一些额外的了解)。因此,sklearn 会为每个集群任意分配编号。
print(clustering.labels_)
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 2 2 2 0 2 2 2 2 2 2 2 2 0 2 2 2 2 0 2 2 2
2 0 0 0 2 2 2 2 2 2 2 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 0 0 0 0 2 0 0 0 0
0 0 2 2 0 0 0 0 2 0 2 0 2 0 0 2 0 0 0 0 0 0 2 2 0 0 0 2 0 0 0 2 0 0 0 2 0
0 2]
标签可以很容易地用 0 替换所有 1,用 1 替换 0,它仍然是同一组集群。
在这种情况下,编号与地面实况中使用的编号不匹配,因此当我们查看生成的集群与地面实况时,颜色不匹配,因此我们使用np.choose
如在例子:
relabel = np.choose(clustering.labels_,[2,0,1]).astype(np.int64)
这采用当前标签,并将 0 更改为 2(因为索引 0 为 2)、1 更改为 0 和 2 更改为 1。这是同一组集群,但我们更改了(任意)标签以匹配。
要回答您关于如何知道它们何时匹配或不匹配的问题:聚类是一种无监督学习的形式,这意味着您通常根本没有基本事实,并且您无需担心匹配。在这个例子中,我们知道基本事实,我们可以看到集群没有并排匹配,所以我们可以根据需要选择使颜色匹配。我们也可以选择不这样做,因为无论如何它们都是相同的集群,但您可能会发现这种方式更容易可视化。
推荐阅读
- javascript - JavaScript Regex 匹配两个字符之间的单词并替换
- excel - 从 Outlook 收件箱下载 Excel 相关附件并使用 VBA 根据日期范围将其保存在特定文件夹中?
- image - NextJS 的图像不适用于 Tailwind
- json - 如何在 Julia 中将 JSON 文件从 URL 读取到 DataFrame 中?
- android - 如何告诉 CMake(通过 externalNativeBuild 调用)在哪里寻找库?
- sql - SQL中具有平均值和计数的子查询
- javafx - JavaFX:防止窗口小于包含的窗格
- java - 如何使用 HDFS API 返回来自 HDFS 的文件列表
- flutter - 如何防止多个 StatefulWidgets (ImageSliders) 覆盖彼此的内容?
- python - 卷积神经网络的反向传播