Хаки с памятью, чтобы запомнить две его разновидности и связанные формулы
Возможно, вы уже знаете, что существует две школы мысли (вики и питон) о том, как отображать матрицу неточностей.
Для каждого новичка наступает момент, когда он видит «другой» вариант и наклоняет голову, чтобы понять его. Литература поддерживает одну схему, в то время как код, кажется, выплескивает другую.
Чтобы понять основы Матрицы путаницы, вы можете заглянуть здесь.
Вот варианты:
по сравнению с:
Дело не в простой замене строк и столбцов, а в том, что истинные положительные, которые находились в верхнем левом углу, теперь заменены на истинно отрицательные.
Если вы используете встроенные функции 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 или через мой веб-сайт: Я просто студент.
Увидимся и приятного обучения!