Menu
CoddyTech

Графики остатков

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

Хорошая оценка может скрывать неверную форму. Эта линия показывает R-квадрат 0.82 на графике подъёма теста, но ошибки образуют дугу:

Слева: высота теста в зависимости от времени в часах: быстро поднимается, затем медленнее; прямая линия аппроксимации, R-квадрат 0.82. Справа: остатки в зависимости от прогнозов растут от -1.3 до +0.7, а затем снова падают до -0.7, образуя дугу вокруг пунктирной линии нуля

Правый график — это график остатков: каждый остаток — фактическое значение минус предсказанное — в зависимости от предсказанного значения, с линией на уровне 0:

residuals = y_test - pred
fig, ax = plt.subplots()
ax.scatter(pred, residuals)
ax.axhline(0, color="gray", linestyle="--")
plt.show()

Остатки хорошей модели разбросаны вокруг 0, как шум. Наличие закономерности означает, что модель что-то упускает: в данном случае — замедление роста.

Если признаков несколько, постройте график остатков также для каждого признака: тот, график которого изгибается дугой, скрывает кривую.

challenge icon

Задание

Средне

Автошкола построила линейную модель по 80 тестам на торможение: speed_kmh и braking_m. В стартовом коде прогнозы тестов хранятся в pred, а диаграмма подписана.

  1. Вычисли остатки.
  2. Построй их точечную диаграмму относительно прогнозов поверх серой пунктирной линии на уровне 0, затем покажи диаграмму.

Не пропускает ли линия кривую? Слева она даже предсказывает отрицательный тормозной путь.

График хорошей линейной модели на других данных выглядит так:

График остатков с заголовком «Хорошая линейная модель»: двадцать точек без какого-либо узора разбросаны выше и ниже пунктирной линии на уровне 0

Coddy опишет твою диаграмму.

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

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

brakes = pd.read_csv("braking.csv")
X_train, X_test, y_train, y_test = train_test_split(brakes[["speed_kmh"]], brakes["braking_m"], test_size=0.25, random_state=0)
model = LinearRegression()
model.fit(X_train, y_train)
pred = model.predict(X_test)

fig, ax = plt.subplots()
ax.set_title("Braking Line Check")
ax.set_xlabel("Predicted braking distance (m)")
ax.set_ylabel("Residual (m)")

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

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

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

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