Оценка ошибок
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 13 из 58.
Насколько модель ошибается в долларах? Вот модель цен на дома, проверенная на пяти домах, которых она раньше не видела:
sklearn.metrics измеряет ошибки за тебя:
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
y_test = np.array([290, 410, 235, 520, 330]) # тысяч долларов
pred = np.array([270, 450, 245, 430, 360])
print(mean_absolute_error(y_test, pred))
print(np.round(np.sqrt(mean_squared_error(y_test, pred)), 1))
print(np.round(r2_score(y_test, pred), 3))Это выводит:
38.0
47.1
0.776MAE, средняя абсолютная ошибка, показывает типичный промах: 38 тысяч. RMSE возводит промахи в квадрат, усредняет их, а затем извлекает корень: один большой промах повышает значение до 47.
Обе метрики выражены в единицах целевой переменной. r2_score — это ваш R-квадрат: объяснено 78% разброса цен.
Задание
СреднеМагазин устанавливает цены на подержанные камеры с помощью модели. Помогает ли второй признак? Программа считывает shutter_k (тысячи сделанных снимков) или megapixels. Стартовый код обучает две модели: только на age_years и на age_years вместе с дополнительным признаком, сохраняя их прогнозы для тестовых данных в preds.
- Для каждой модели выведите MAE, RMSE (1 знак после запятой) и R squared (3 знака после запятой).
- Выведите модель с меньшим MAE.
Для другого магазина и shutter_k:
age_years: MAE 212.4, RMSE 268.1, R squared 0.853
age_years + shutter_k: MAE 98.7, RMSE 121.0, R squared 0.97
Better: age_years + shutter_k, off by 98.7 dollars on a typical cameraПопробуйте сами
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# Одна строка на каждую проданную камеру: возраст, число срабатываний затвора в тысячах, мегапиксели, цена в долларах
cameras = pd.read_csv("cameras.csv")
extra = input()
names = ["age_years", "age_years + " + extra]
columns = [["age_years"], ["age_years", extra]]
# Разделяем данные целыми строками; каждая модель ниже выбирает свои столбцы
X_train, X_test, y_train, y_test = train_test_split(cameras, cameras["price"], test_size=0.25, random_state=0)
# По одной модели для каждого списка столбцов и её прогнозы для камер из тестовой выборки
preds = []
for cols in columns:
model = LinearRegression()
model.fit(X_train[cols], y_train)
preds.append(model.predict(X_test[cols]))
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск модели3Линейная регрессия
Предсказание чиселНесколько признаковОценка ошибокГрафики остатковПовторение: прокат велосипедовПотренируйтесь самостоятельно: Онлайн-компилятор Python