Матрица путаницы в классификации меток имеет неправильное количество меток - PullRequest
0 голосов
/ 26 сентября 2018

Я кормлю в y_test и y_pred в матрицу путаницы.Мои данные предназначены для классификации по нескольким меткам, поэтому значения строк представляют собой одну горячую кодировку.

мои данные содержат 30 меток, но после подачи в матрицу путаницы выходные данные содержат только 11 строк и столбцов, что меня смущает.Я думал, что я должен иметь 30X30.

Их форматы являются массивами.(y_test и y_pred - это фреймы данных, из которых я преобразую их в массивы с использованием dataframe.values)

y_test.shape

(8680, 30)

y_test

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

y_pred.shape

(8680, 30)

y_pred

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

Я превращаю их в замешательствоИспользуемый формат матрицы:

y_test2 = y_test.argmax(axis=1)
y_pred2 = y_pred.argmax(axis=1)
conf_mat = confusion_matrix(y_test2, y_pred2)

Вот как выглядит моя матрица путаницы:

conf_mat.shape

(11, 11)

conf_mat

array([[4246,   77,   13,   72,   81,    4,    6,    3,    0,    0,    4],
       [ 106, 2010,   20,   23,   21,    0,    5,    2,    0,    0,    0],
       [ 143,   41,   95,   32,   10,    3,   14,    1,    1,    1,    2],
       [ 101,    1,    0,  351,   36,    0,    0,    0,    0,    0,    0],
       [ 346,   23,    7,   10,  746,    5,    6,    4,    3,    3,    2],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0]])

Почему моя матрица смешения имеет форму только 11 X 11?не должно быть 30X30?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Все это означает, что некоторые метки не используются.

y_test.any(axis=0)
y_pred.any(axis=0)

Должно показать, что только в 11 столбцах есть любые 1.

Вот как это будет выглядеть, еслине было дела:

from sklearn.metrics import confusion_matrix

y_test = np.zeros((8680, 30))
y_pred = np.zeros((8680, 30))

y_test[np.arange(8680), np.random.randint(0, 30, 8680)] = 1
y_pred[np.arange(8680), np.random.randint(0, 30, 8680)] = 1

y_test2 = y_test.argmax(axis=1)
y_pred2 = y_pred.argmax(axis=1)

confusion_matrix(y_test2, y_pred2).shape  # (30, 30)
0 голосов
/ 26 сентября 2018

Я думаю, вы не совсем ясно, определение confusion_matrix

y_true = [2, 0, 2, 2, 0, 1]
y_pred = [0, 0, 2, 2, 0, 2]
confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]])

Которое в кадре данных

pd.DataFrame(confusion_matrix(y_true, y_pred),columns=[0,1,2],index=[0,1,2])
Out[245]: 
   0  1  2
0  2  0  0
1  0  0  1
2  1  0  2

Столбец и индекс являются категорией ввода.

У вас есть (11,11), что означает, что у вас есть только 11 категорий в ваших данных

...