即使四舍五入也无法获得分类报告 [英] Cannot get classification report even after rounding up predictions

查看:71
本文介绍了即使四舍五入也无法获得分类报告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用keras对我的数据集进行分类,但出现 ValueError:分类指标无法处理多类目标和multilabel-indicator目标混合错误. y_pred 中的值如下

I am trying to classify my dataset using keras but I am getting ValueError: Classification metrics can't handle a mix of multiclass and multilabel-indicator targets error. values in y_pred are as following

array([[2.95522604e-02, 9.70325887e-01, 3.20542094e-05, ...,
        1.74383260e-07, 1.98587145e-07, 9.88743452e-08],
       [3.25102806e-01, 6.68996394e-01, 1.65001326e-03, ...,
        5.84201662e-05, 5.91963508e-05, 4.68929684e-05],
       [8.87618303e-01, 1.12024814e-01, 1.22764613e-04, ...,
        1.44616331e-06, 1.33618846e-06, 1.68983024e-06],
       ...,
       [3.09438616e-01, 6.83520675e-01, 1.94711238e-03, ...,
        7.57295784e-05, 7.51852640e-05, 5.94857411e-05],
       [6.73729360e-01, 3.21534157e-01, 1.41171378e-03, ...,
        4.93246625e-05, 4.61974196e-05, 4.73670734e-05],
       [1.33120596e-01, 8.64127636e-01, 7.41749362e-04, ...,
        1.87505502e-05, 1.95825924e-05, 1.34223355e-05]], dtype=float32)

我正在按照

I am rounding them up as mentioned in this question as y_test values are

array([1, 0, 0, ..., 0, 1, 1]) 

y_pred = y_pred.round().astype(int)舍入 y_pred 后,我有

array([[0, 1, 0, ..., 0, 0, 0],
       [1, 0, 0, ..., 0, 0, 0],
       [1, 0, 0, ..., 0, 0, 0],
       ...,
       [0, 1, 0, ..., 0, 0, 0],
       [1, 0, 0, ..., 0, 0, 0],
       [0, 1, 0, ..., 0, 0, 0]])

即使在此之后,当我尝试使用 print(metrics.classification_report(y_test,y_pred))获得分类报告时,我仍然遇到与上述相同的错误.有人可以帮我解决我在这里做错了什么吗?谢谢

Bit even after this when i try to get classification report using print(metrics.classification_report(y_test, y_pred)) I get same error as above mentioned. Can someone help me about what am I doing wrong here? Thank you

推荐答案

The scikit-learn docs states that the y_pred input must be a 1d array-like. You need to argmax your logits.

import numpy as np
import tensorflow as tf
from sklearn.metrics import classification_report


y_pred = tf.math.abs(tf.random.normal([32, 2])).numpy()
y_test = tf.random.uniform([32, 1], minval=0, maxval=2, dtype=tf.int32).numpy()

# this will explode
print(classification_report(y_test, y_pred))

# ValueError: Classification metrics can't handle a mix of binary and 
# continuous-multioutput targets

# get predicted indices
y_pred = np.argmax(y_pred, 1)

# try again
print(classification_report(y_test, y_pred))

#                precision    recall  f1-score   support
#
#             0       0.41      0.50      0.45        14
#             1       0.53      0.44      0.48        18
# 
#      accuracy                           0.47        32
#     macro avg       0.47      0.47      0.47        32
#  weighted avg       0.48      0.47      0.47        32

这篇关于即使四舍五入也无法获得分类报告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆