Python accuracy_check 为翻转分类给出 0 结果

Posted

技术标签:

【中文标题】Python accuracy_check 为翻转分类给出 0 结果【英文标题】:Python accuracy_check giving 0 result for flipped classification 【发布时间】:2020-01-23 23:00:59 【问题描述】:

我正在使用来自sklearn.metricsaccuracy_check

我的分类测试数据标签是针对例如

[1 1 0 0 0 1 1]

Kmeans 给出的标签为

[0 0 1 1 1 0 0]

基本上,Kmeans 分类正确,但标签翻转了。 accuracy_check 的准确率为 0%。

我的代码

X_full, y_full = make_blobs(n_samples=nsamples,
                            centers=2,
                            n_features=no_feat,
                            random_state=ran)

X, X_test, y, y_test = train_test_split(X_full, y_full, test_size=0.2)

kmeans = KMeans(2, random_state=3)
labels = kmeans.fit(X).predict(X_test)
acc = accuracy_score(y_test, labels)
print("KMeans:", acc)

关于如何实现这一点的任何想法?

编辑:我也不能简单地翻转标签,因为有时它确实分类正确。在其他情况下,我也有多个标签。

谢谢

【问题讨论】:

【参考方案1】:

为了衡量聚类检索您碰巧拥有标签的类的效果,由于您指出的原因,使用 accuracy_score 是错误的。本质上,这是因为聚类算法为其聚类提供了任意标签。相反,在这种情况下,您应该使用调整后的 rand 分数,无论标签如何,它都会返回相同的分数:

from sklearn.metrics.cluster import adjusted_rand_score

print(adjusted_rand_score([0, 0, 1, 1], [0, 0, 1, 1]))
print(adjusted_rand_score([0, 0, 1, 1], [1, 1, 0, 0]))

两者都应该返回 1.0

【讨论】:

【参考方案2】:

除了准确率,你能不能试试别的?

例如,您可以尝试使用v_measure_score 而不是accuracy_score

根据the documentation

此指标独立于标签的绝对值:a 类或簇标签值的排列不会改变 以任何方式得分。

【讨论】:

以上是关于Python accuracy_check 为翻转分类给出 0 结果的主要内容,如果未能解决你的问题,请参考以下文章

Python - 翻转(reverse)字符串(string)的所有方法 详解

Python - 翻转(reverse)字符串(string)的所有方法 详解

python输入一个字符串,输出翻转后的字符串(翻转字符串)

华为OD机试真题Python实现单词反转真题+解题思路+代码(2022&2023)

leetcode25. K 个一组翻转链表---python

leetcode25. K 个一组翻转链表---python