Матрица ошибок
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 21 из 58.
Точность учитывает ошибки, но не их тип. При тесте на грипп отправить больного пациента домой гораздо хуже, чем дать ложную тревогу. Матрица ошибок подсчитывает ошибки каждого типа:
Грипп — положительный класс, 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В этой главе речь пойдёт о том, как уменьшить число случаев в ячейке пропущенных случаев. В конце мы рассмотрим скрининговый тест, который почти никого не пропускает.
Задание
СреднеСпасатели получают утреннее предупреждение, когда может образоваться обратное течение. Стартовый код обучает модель предупреждений и заполняет pred для тестовых утренних наблюдений (1 означает обратное течение).
- Создай матрицу ошибок и выведи четыре значения, как показано ниже.
- Построй её на
ax, обозначив классы какcalmиrip, и покажи её.
Для другой модели:
Rips caught: 30
Rips missed: 2
False alarms: 9
Calm days cleared: 59Coddy описывает твою диаграмму. Она должна выглядеть как эта диаграмма для сигнализации об утечке в трубе:
Попробуйте сами
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")
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск моделиПотренируйтесь самостоятельно: Онлайн-компилятор Python