Прогресс при диабете
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 55 из 58.
В диабетической клинике назначают повторные приемы в зависимости от того, насколько прогрессирует заболевание каждого пациента в течение года. В разделе 2 один признак рассказывал лишь часть истории:
Теперь учитываются все десять показателей из load_diabetes. Какой модели следует доверять клинике и насколько она ошибётся в баллах?
Ему нужен объективный выбор с помощью перекрёстной проверки, честная оценка ошибок на пациентах, которых модель ещё не видела, и проверка остатков, чтобы выявить всё, что модель упустила.
Задание
СложноПрограмма считывает значения alpha для Ridge в alphas; заготовка настраивает график с заголовком.
- Выдели четверть данных для тестирования, указав
random_state=0. - Оцени
LinearRegressionиRidgeдля каждого значения alpha с помощью 5-кратной перекрёстной проверки на обучающих строках. Выведи среднее значение R-квадрата для каждой модели (3 знака после запятой), а затем победителя. - Обучи победившую модель и выведи её MAE и RMSE на тестовых данных (1 знак после запятой), а также R-квадрат (3 знака после запятой).
- Построй диаграмму рассеяния тестовых остатков — истинных значений минус предсказанные — относительно предсказаний. Добавь линию нуля, затем покажи график.
Для другой клиники и значений alpha 0.5 и 2.0:
Linear: CV R squared 0.472
Ridge 0.5: CV R squared 0.481
Ridge 2.0: CV R squared 0.402
Winner: Ridge 0.5
Test errors: MAE 47.3, RMSE 58.9, R squared 0.414Затем Coddy опишет твою диаграмму остатков.
Попробуйте сами
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
diabetes = load_diabetes(as_frame=True)
X = diabetes.data
y = diabetes.target
# Значения alpha для Ridge, которые нужно попробовать
n = int(input())
alphas = []
for i in range(n):
alphas.append(float(input()))
fig, ax = plt.subplots()
ax.set_title("Residuals on Test Patients")
ax.set_xlabel("Predicted progression")
ax.set_ylabel("Residual (true - predicted)")
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск моделиПотренируйтесь самостоятельно: Онлайн-компилятор Python