Хаки с памятью, чтобы запомнить две его разновидности и связанные формулы

Возможно, вы уже знаете, что существует две школы мысли (вики и питон) о том, как отображать матрицу неточностей.

Для каждого новичка наступает момент, когда он видит «другой» вариант и наклоняет голову, чтобы понять его. Литература поддерживает одну схему, в то время как код, кажется, выплескивает другую.

Чтобы понять основы Матрицы путаницы, вы можете заглянуть здесь.

Вот варианты:

по сравнению с:

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

Если вы используете встроенные функции scikit-learn, такие как confusion_matrix, вам нужно знать макет ввода и вывода, иначе все ваши расчеты чувствительности (отзыва), специфичности, точности, оценки F1 будут неправильными.

Покажи мне доказательства!

Хорошо, давайте рассмотрим реальный пример, чтобы понять это с помощью кода.

Это наш набор данных о результатах лечения 17 человек. Они либо нездоровы (положительный результат теста), либо здоровы (отрицательный результат теста). Первый столбец показывает их фактическое состояние, а второй столбец предсказывает наш алгоритм. Код, использованный для генерации этого:

Перспектива 1:

Если вы, как и я, изучили большую часть статистики с помощью книг и публикаций, богатых примерами из области медицины, фактические данные (или золотой стандарт) будут вверху в виде столбцов, а Истинный положительный результат в левой верхней ячейке. Наш набор данных будет выглядеть так:

Вот код Python для его создания:

cm = confusion_matrix(data.Predicted, data.Actual, labels=[‘Positive’, ‘Negative’])
print(cm)

Обратите внимание, как мы передаем data.Predicted сначала и data.Actual позже. Также порядок labels - Positive первым.

Выход:

Мой взлом памяти, чтобы запомнить порядок аргументов:

Я просто читаю это так, как читают по-английски - слева направо. И я уверен, что это макет, который следует использовать.

Для расчета всех показателей можно использовать функцию sklearn classification_report.

Мне нравится эта функция, потому что порядок фактических и прогнозируемых аргументов остается неизменным, независимо от вашей точки зрения. Все, что вам нужно указать иначе, - это порядок этикеток.

report = classification_report(data.Actual, data.Predicted, labels=[‘Positive’, ‘Negative’])
print(report)

Всегда сначала Фактическое, а затем Прогнозируемое - в элегантном алфавитном порядке. Результат, который он генерирует:

Перспектива 2:

Те, кто изучил это с помощью документации по программированию и руководств, ненавидят приведенное выше представление. Всегда все наоборот!

Положение ложных положительных результатов и ложных отрицательных результатов остается неизменным в матрице путаницы 2x2, какую бы перспективу вы ни выбрали.

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

cm2 = confusion_matrix(data.Actual, data.Predicted, labels=[‘Negative’, ‘Positive’])
print(cm2)

И старый добрый classification_report остается прежним, единственное изменение касается порядка меток:

report2 = classification_report(data.Actual, data.Predicted, labels=[‘Negative’, ‘Positive’])
print(report2)

Вот и все, теперь оба результата идеально синхронизированы!

Дополнительный совет - никогда не забывайте формулы:

Мне часто приходилось просматривать свои заметки, чтобы вспомнить, что означает Точность или какова формула для Чувствительности (также известной как Отзыв). Итак, вот способ запоминания, который я использую, чтобы их запомнить.

Во-первых, настоящие формулы для них, чтобы вы могли легко понять их. Я объясняю здесь на основе Перспективы 1, но вы можете очень легко изменить ее на перспективу 2, если хотите.

Мне нравится сначала располагать их в алфавитном порядке, чтобы не путать их - 1. P вариант 2. R вызов 3. S специфичность

Точность = TP / (TP + FP)

Напомним = TP / (TP + FN)

Специфичность = TN / (TN + FP)

Мой хакер памяти, чтобы запомнить их:

Точность - это первая ячейка, деленная на сумму строк: 2/6 = 0,33

Напомним, первая ячейка делится на сумму столбца: 2/7 = 0,29.

Специфичность - это последняя ячейка, деленная на сумму столбца: 6/10 = 0,60.

Вот и все! Сделал мою жизнь немного проще, надеюсь, это поможет и вам. Есть ли у вас какие-нибудь полезные советы и рекомендации? Дайте мне знать в разделе комментариев или напишите мне отдельно.

Хотите поделиться идеями, задать вопросы или просто обсудить мысли? Свяжитесь со мной в LinkedIn, YouTube, GitHub или через мой веб-сайт: Я просто студент.

Увидимся и приятного обучения!