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.metrics
的accuracy_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)