【问题标题】:sklearn k means cluster labels vs ground truth labelssklearn k 表示集群标签与地面实况标签
【发布时间】:2020-07-10 11:19:55
【问题描述】:

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

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

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

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

    标签可以很容易地将所有 1 替换为 0,将 0 替换为 1,它仍然是同一组集群。

    在这种情况下,编号与地面实况中使用的编号不匹配,因此当我们查看生成的集群与地面实况时颜色不匹配,因此我们使用 @987654322 重新分配它们@ 如示例中所示:

    relabel = np.choose(clustering.labels_,[2,0,1]).astype(np.int64)
    

    这采用当前标签,并将 0 更改为 2(因为索引 0 为 2)、1 更改为 0 和 2 更改为 1。这是同一组集群,但我们更改了(任意)标签以匹配。

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

    【讨论】:

    • 感谢您的回答。因为编号/标签不匹配,我假设如果不首先重新标记,运行 print(classification_report(y_true = y, y_pred = clustering.labels_)) 的精度和准确度得分将不准确。对吗?
    • 是的,所以您说在此之前应确保标签匹配是正确的。
    • 再次感谢您的帮助。
    猜你喜欢
    • 2021-10-23
    • 2021-04-12
    • 2020-04-27
    • 2020-12-05
    • 2020-12-14
    • 2012-07-25
    • 1970-01-01
    • 2022-06-28
    • 2018-10-10
    相关资源
    最近更新 更多