Почему 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