confusion_matrix () | ValueError: метрики классификации не могут обрабатывать сочетание мультиклассовых и многоклассовых целей с несколькими выходами.

Определенно спрашивали раньше, но мне не удалось проанализировать решения других сообщений для моего собственного случая этой проблемы.

У меня есть много моделей классификации, которые я хочу сравнить, используя confusion_matrix()

matrix = confusion_matrix(y_test, y_pred) # ERROR
>>> y_pred
[[2 2 2 ... 2 2 2]
 [2 2 2 ... 2 2 2]
 [2 2 2 ... 2 2 2]
 ...
 [3 3 2 ... 3 2 3]
 [2 2 2 ... 2 2 2]
 [3 3 3 ... 3 3 3]]
>>> y_pred.shape
(500, 256)
>>> y_test
[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 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 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 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3
 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3]
>>> y_test.shape
(500, )

Ошибка:

ValueError: Classification metrics can't handle a mix of multiclass and multiclass-multioutput targets

Когда .flatten() выполняется на y_pred - т.е. 1D массив (500 * 256 = 128000):

ValueError: Found input variables with inconsistent numbers of samples: [500, 128000]

person StressedBio2    schedule 29.03.2021    source источник
comment
y_pred должен быть 1d массивом для сравнения   -  person Prakash Dahal    schedule 29.03.2021
comment
Как ваш y_pred попал в 2d массив? какую предварительную обработку вы сделали в y?   -  person Prakash Dahal    schedule 29.03.2021
comment
Поэтому я преобразовал y_pred = model.predict (X_test_seq) в ту же форму, что и X_test_seq.   -  person StressedBio2    schedule 29.03.2021
comment
'y_pred' как плоский массив не работал; (@PrakashDahal   -  person StressedBio2    schedule 29.03.2021
comment
какова форма y_pred после выравнивания?   -  person Prakash Dahal    schedule 29.03.2021
comment
@PrakashDahal (128000,)   -  person StressedBio2    schedule 29.03.2021
comment
Можете ли вы сказать мне, что означает предсказанный [2,2,2,2....2]? а какой у тебя?   -  person Prakash Dahal    schedule 29.03.2021
comment
@PrakashDahal. Есть 3 класса для прогнозирования {1, 2, 3}. 'y' обозначает метки в наборе данных   -  person StressedBio2    schedule 29.03.2021
comment
Тот факт, что у вас есть 3 класса для прогнозирования, не оправдывает единственного прогноза, представляющего собой массив формы [3 3 2 ... 3 2 3] и длины 256. Пожалуйста, отредактируйте и обновите свой вопрос, чтобы прояснить и предоставить контекст.   -  person desertnaut    schedule 29.03.2021


Ответы (1)


Матрица неточностей работает на основе сравнения между каждым прогнозируемым значением и фактическим значением. Невозможно сравнивать 1 с [2,2,2....2,2,2]

В вашем случае ваш y_pred равен 2d, но ваш y_test равен 1d, вот где возникла фактическая ошибка. Я считаю, что вы должны выбрать наиболее частое число в своем предсказанном списке. Нравится 2 от [2,2,2....2,2]

Итак, вот решение:

from scipy import stats 
import numpy as np

#taking the most frequent element from the predicted list
y_pred_list = [int(stats.mode(arr)[0]) for arr in y_pred.tolist()] #convert to list

y_pred_array = np.array(y_pred_list)  #convert to 1D with same shape of y_test

print(y_pred_array.shape)

print(y_pred_array)

matrix = confusion_matrix(y_test, y_pred_array)
person Prakash Dahal    schedule 31.03.2021