首页 > 解决方案 > sklearn k 表示集群标签与地面实况标签

问题描述

我正在尝试学习sklearn。正如我从以下示例的第 5 步中了解到的那样,预测的集群可能会被错误标记,我需要正确地重新标记它们。这也在sci-kit 的示例中完成。必须重新分配标签,以便聚类的结果和地面实况按颜色匹配。

我如何知道预测集群的标签是否与初始数据标签匹配,以及如何重新调整标签的索引以正确匹配两组?

标签: pythonscikit-learn

解决方案


使用聚类,聚类之间没有有意义的顺序或比较,我们只是在寻找具有共同点的观察组。没有理由将一个集群称为“蓝色集群”与“红色集群”(除非您对该领域有一些额外的了解)。因此,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。这是同一组集群,但我们更改了(任意)标签以匹配。

要回答您关于如何知道它们何时匹配或不匹配的问题:聚类是一种无监督学习的形式,这意味着您通常根本没有基本事实,并且您无需担心匹配。在这个例子中,我们知道基本事实,我们可以看到集群没有并排匹配,所以我们可以根据需要选择使颜色匹配。我们也可以选择不这样做,因为无论如何它们都是相同的集群,但您可能会发现这种方式更容易可视化。


推荐阅读