Почему Scikit учиться путаница матрица перевернута?

У меня есть 3 вопроса:

1)

Матрица путаницы для sklearn выглядит следующим образом:

TN | FP
FN | TP

Хотя, когда я смотрю на онлайн-ресурсы, я нахожу это так:

TP | FP
FN | TN

Какой из них я должен рассмотреть?

2)

Так как приведенная выше матрица путаницы для обучения scikit отличается от той, которую я нахожу в других ресурсах, в мультиклассовой матрице путаницы, какова будет структура? Я смотрю на этот пост здесь: Scikit-learn: Как получить True Positive, True Negative, False Positive и False Negative В этом посте @lucidv01d опубликовал график, чтобы понять категории для мультикласса. та же категория в scikit учиться?

3)

Как вы рассчитываете точность мультикласса? например, у меня есть эта матрица путаницы:

[[27  6  0 16]
 [ 5 18  0 21]
 [ 1  3  6  9]
 [ 0  0  0 48]]

В том же посте, о котором я говорил в вопросе 2, он написал следующее уравнение:

Общая точность

ACC = (TP+TN)/(TP+FP+FN+TN)

но это не только для двоичного? Я имею в виду, для какого класса я заменяю TP?

2 ответа

Причина, по которой sklearn показала свою путаницу:

TN | FP
FN | TP

Это происходит потому, что в своем коде они считают 0 отрицательным классом, а один - положительным. sklearn всегда считает меньшее число отрицательным, а большое число положительным. Под номером я подразумеваю значение класса (0 или 1). Порядок зависит от вашего набора данных и класса.

Точность будет суммой диагональных элементов, деленной на сумму всех элементов. P Диагональные элементы - это количество правильных предсказаний.

Как говорится в руководстве по sklearn: "(Википедия и другие ссылки могут использовать другое соглашение для осей)"

Что это значит? При построении матрицы путаницы, первый шаг должен решить, куда поместить прогнозы и реальные значения (истинные метки). Есть две возможности:

  • поставить прогнозы для столбцов и истинные метки для строк
  • ставить прогнозы для строк и истинные метки для столбцов

Это совершенно субъективно, чтобы решить, каким путем вы хотите идти. Из этой картины объяснено здесь, ясно, что соглашение scikit-learn состоит в том, чтобы ставить предсказания для столбцов, а истинные метки для строк.

Таким образом, согласно соглашению scikit-learns это означает:

  • первый столбец содержит отрицательные прогнозы (TN и FN)
  • второй столбец содержит положительные прогнозы (TP и FP)
  • первая строка содержит отрицательные метки (TN и FP)
  • второй ряд содержит положительные метки (TP и FN)
  • Диагональ содержит количество правильно предсказанных меток.

Основываясь на этой информации, я думаю, что вы сможете решить часть 1 и часть 2 ваших вопросов.

Для части 3 вы просто суммируете значения по диагонали и делите на сумму всех элементов, которые будут

(27 + 18 + 6 + 48) / (27 + 18 + 6 + 48 + 6 + 16 + 5 + 21 + 1 + 3 + 9)

или вы можете просто использовать функцию Score().

  • Соглашение scikit-learn заключается в размещении прогнозов в столбцах и реальных значений в строках.

  • Соглашение scikit-learn заключается в том, что по умолчанию 0 для отрицательного класса (вверху) и 1 для положительного класса (внизу). порядок можно изменить с помощью label = [1,0]. Таким образом можно рассчитать общую точность

    M = np.array ([[27, 6, 0, 16], [5, 18,0,21],[1,3,6,9],[0,0,0,48]])

    M

сумма диагонали

w = M.diagonal()
w.sum()

99

сумма матриц

M.sum()

160

ACC = w.sum()/M.sum()
ACC

0,61875

Другие вопросы по тегам