f1_score: ValueError: Не можете обработать сочетание индикатора нескольких меток и выхода мультикласса? - PullRequest
0 голосов
/ 26 августа 2018
#coding=utf-8
import numpy as np
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import f1_score
y_true = np.array([[1, 0, 0],
                   [1, 1, 0],
                   [0, 0, 1],
                   [1, 0, 1],
                   [1, 1, 0],
                   [0, 0, 0],
                   [0, 0, 0]])
# If you change any of the following arrays to a number other than 0 and 1, you # will get an error.
y_pred = np.array([[1, 0, 0],
                   [1, 1, 0],
                   [0, 2, 1],  ####error
                   [1, 0, 1],
                   [0, 1, 0],
                   [0, 0, 0],
                   [0, 0, 0]])
print (f1_score(y_true, y_pred, average='micro'))
#The following situation will arbitrarily modify the number, no error will be #reported.
z_true = np.array([1, 2, 3, 4, 3])
z_pred = np.array([1, 0, 2, 4, 3])
print (f1_score(z_true, z_pred , average='micro'))
#

Эта проблема отличается от других подобных ошибок.

#############################################################
Traceback (most recent call last):
  File "D:/PycharmWorkSpace/ceshi/GridSearch/Grid Search.py", line 20, in <module>
    print (f1_score(y_true, y_pred, average='micro'))
  File "D:\python(2.7.9)\lib\site-packages\sklearn\metrics\classification.py", line 639, in f1_score
    sample_weight=sample_weight)
  File "D:\python(2.7.9)\lib\site-packages\sklearn\metrics\classification.py", line 756, in fbeta_score
    sample_weight=sample_weight)
  File "D:\python(2.7.9)\lib\site-packages\sklearn\metrics\classification.py", line 956, in precision_recall_fscore_support
    y_type, y_true, y_pred = _check_targets(y_true, y_pred)
  File "D:\python(2.7.9)\lib\site-packages\sklearn\metrics\classification.py", line 82, in _check_targets
    "".format(type_true, type_pred))
ValueError: Can't handle mix of multilabel-indicator and multiclass-multioutput

1 Ответ

0 голосов
/ 26 августа 2018

Что вы подразумеваете под изменением 1 на 2 в y_pred? Для мульти-метки y_pred вы должны использовать одну горячую кодировку, где каждый столбец обозначает класс, а каждая запись занимает только 0/1. Ошибка возникает из-за смешения двоичного кодирования с метками классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...