Menu
CoddyTech

Матрица ошибок

Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 21 из 58.

Точность учитывает ошибки, но не их тип. При тесте на грипп отправить больного пациента домой гораздо хуже, чем дать ложную тревогу. Матрица ошибок подсчитывает ошибки каждого типа:

Сетка 2 на 2 для теста на грипп у 100 пациентов. Строки показывают истину: сначала здоровые, затем больные гриппом; столбцы показывают результат: сначала сказали, что пациент здоров, затем сказали, что у него грипп. Синие правильные ответы: 50 истинноотрицательных, 42 истинноположительных. Оранжевые ошибки: 3 ложноположительных, 5 ложноотрицательных

Грипп — положительный класс, 1. Ошибки находятся вне диагонали: ложноположительные результаты (ложные тревоги) и ложноотрицательные результаты (пропущенные случаи).

from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

cm = confusion_matrix(y_test, pred)  # сначала истинные значения
print(cm)
print(cm[1, 0])  # строка 1: болеет гриппом, столбец 0: определён как здоровый
ConfusionMatrixDisplay.from_predictions(y_test, pred, display_labels=["healthy", "flu"],
                                        ax=ax, colorbar=False)  # без цветовой шкалы: количества говорят сами за себя

Это выводит:

[[50  3]
 [ 5 42]]
5

В этой главе речь пойдёт о том, как уменьшить число случаев в ячейке пропущенных случаев. В конце мы рассмотрим скрининговый тест, который почти никого не пропускает.

challenge icon

Задание

Средне

Спасатели получают утреннее предупреждение, когда может образоваться обратное течение. Стартовый код обучает модель предупреждений и заполняет pred для тестовых утренних наблюдений (1 означает обратное течение).

  1. Создай матрицу ошибок и выведи четыре значения, как показано ниже.
  2. Построй её на ax, обозначив классы как calm и rip, и покажи её.

Для другой модели:

Rips caught: 30
Rips missed: 2
False alarms: 9
Calm days cleared: 59

Coddy описывает твою диаграмму. Она должна выглядеть как эта диаграмма для сигнализации об утечке в трубе:

Матрица ошибок с заголовком «Предупреждения об утечке». Строки — истинные метки: сначала dry, затем leak; столбцы — предсказанные метки. Значения в ячейках: 61 и 4 в строке dry, 7 и 28 в строке leak

Попробуйте сами

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

# Одна строка на каждое утро на пляже для сёрфинга: 1 в rip означает, что в тот день образовалось отбойное течение
beach = pd.read_csv("rips.csv")
features = ["wave_height_m", "wave_period_s", "wind_kmh", "tide_change_m"]
X = beach[features]
y = beach["rip"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# Предупреждение спасателей об отбойном течении
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
pred = model.predict(X_test)

fig, ax = plt.subplots()
ax.set_title("Rip Current Alerts")

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение с учителем

Потренируйтесь самостоятельно: Онлайн-компилятор Python