2016-01-28 6 views
2

Когда я распечатываю матрицу смешения scikit-learn, я получаю очень огромную матрицу. Я хочу проанализировать, каковы истинные положительные стороны, истинные негативы и т. Д. Как я могу это сделать? Вот как выглядит моя матрица замешательства. Я хочу это лучше понять.Как я могу анализировать матрицу путаницы?

[[4015 336 0 ..., 0 0 2] 
[ 228 2704 0 ..., 0 0 0] 
[ 4 7 19 ..., 0 0 0] 
..., 
[ 3 2 0 ..., 5 0 0] 
[ 1 1 0 ..., 0 0 0] 
[ 13 1 0 ..., 0 0 11]] 

ответ

1

термины, как истинный положительный, ложноположительный и т.д. относятся к бинарной классификации. В то время как размерность вашей матрицы путаницы больше двух. Таким образом, вы можете говорить только о количестве наблюдений, которые, как известно, относятся к группе i, но, как предсказывают, относятся к группе j (определение матрицы путаницы).

4

IIUC, ваш вопрос не определен. «Ложные срабатывания», «истинные негативы» - это термины, которые определяются только для двоичной классификации. Узнайте больше об определении confusion matrix.

В этом случае матрица путаницы имеет размерность N X N. Каждая диагональ представляет для входа (i, i) случай, когда предсказание составляет i, и результатом является i. Любая другая недиагональная запись указывает на некоторую ошибку, когда предсказание было i, и результатом является j. В этом случае нет смысла «позитивно» и «отрицательно».

Легко найти элементы диагностики, используя np.diagonal, и, следовательно, их легко суммировать. Сумма неправильных случаев - это сумма матрица минус сумма диагонали

0

подход 1:. Binary Классификация

from sklearn.metrics import confusion_matrix as cm 
import pandas as pd 

y_test = [1, 0, 0] 
y_pred = [1, 0, 0] 
confusion_matrix=cm(y_test, y_pred) 

list1 = ["Actual 0", "Actual 1"] 
list2 = ["Predicted 0", "Predicted 1"] 
pd.DataFrame(confusion_matrix, list1,list2) 

enter image description here

Approa ч 2: MultiClass Классификация

Хотя sklearn.metrics.confusion_matrix обеспечивает цифровую матрицу, вы можете создать 'отчет', используя следующее:

import pandas as pd 
y_true = pd.Series([2, 0, 2, 2, 0, 1, 1, 2, 2, 0, 1, 2]) 
y_pred = pd.Series([0, 0, 2, 1, 0, 2, 1, 0, 2, 0, 2, 2]) 

pd.crosstab(y_true, y_pred, rownames=['True'], colnames=['Predicted'], margins=True) 

что приводит:

Predicted 0 1 2 All 
True     
0   3 0 0 3 
1   0 1 2 3 
2   2 1 3 6 
All  5 2 5 12 

Это позволяет нам видеть, что:

  1. Диагональные элементы показывают количество co rrect классификации для каждого класса: 3, 1 и 3 для классов 0, 1 и 2.
  2. Недиагональные элементы предоставляют ошибочные классификации: например, 2 класса 2 были неправильно классифицированы как 0, ни один из классов 0 были классифицированы как 2 и т. д.
  3. Общее количество классификаций для каждого класса в обоих y_true и y_pred, от «Все» подытогами

Этот метод также работает для текстовых меток, и для большого количества образцов в наборе данных может быть продлен для предоставления процентных отчетов.