Линейная регрессия scikit-learn: diabetes, fit и predict
load_diabetes возвращает встроенный набор данных для регрессии. LinearRegression.fit(X_train, y_train) подбирает коэффициенты по обучающим строкам, а predict(X_test) рассчитывает прогноз на новых строках с тем же набором признаков.
Отложенные строки не должны участвовать в подборе модели, если вы используете их для честной оценки качества.
Короткий пример
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
x, y = load_diabetes(return_X_y=True)
model = LinearRegression().fit(x[:350], y[:350])
prediction = model.predict(x[350:353])
print(x.shape)
print(prediction.shape)
Результат:
(442, 10) (3,)
Форма прогноза показывает число предсказаний, а не качество модели. Для оценки нужны истинные метки отложенных строк и подходящая метрика, например MAE. Такой учебный пример не является медицинской рекомендацией или готовой клинической моделью.
Попробуйте самостоятельно
Ниже — отдельное задание с другими данными. Напишите решение и запустите проверку кода без регистрации. Для последовательного обучения откройте курс.
Предсказания для отложенных строк diabetes
Датасет diabetes из scikit-learn давно стал удобным полигоном для тех, кто хочет быстро убедиться, что линейная регрессия работает именно так, как описано в учебнике. В нём 442 наблюдения, десять уже преобразованных числовых признаков и отдельная числовая цель. Это позволяет сосредоточиться на механике обучения и предсказания.
Исследователь решает обучить простую линейную модель на первых четырёхстах строках, оставив несколько последних в стороне намеренно. Эти отложенные строки модель ни разу не видела в процессе подбора коэффициентов, и именно это делает их удобными кандидатами для того, чтобы продемонстрировать шаг предсказания в чистом виде: признаки подаются в уже обученную модель, которая возвращает числовой ответ, опираясь исключительно на усвоенные зависимости.
Для двух строк, следующих сразу после обучающей выборки, интересно поставить предсказание и реальную целевую величину рядом — не для того, чтобы делать выводы о том, насколько хороша модель в целом, а просто чтобы увидеть, насколько близко линейное уравнение подходит к известному ответу в конкретных случаях. Именно такое сравнение двух пар чисел и должна вернуть программа.
Что уже дано
В редакторе есть импорты load_diabetes и LinearRegression и имена переменных для результата. Скрытая подготовка не создаёт данные. Встроенный датасет доступен офлайн через load_diabetes(as_frame=True); его data — DataFrame признаков, а target — отдельная Series цели.
Что нужно сделать
Загрузите датасет в bunch, сохраните признаки в X, цель в y. В X_train и y_train возьмите первые 400 строк, обучите на них model типа LinearRegression. В X_new возьмите следующие две строки признаков, а в y_new — соответствующие известные цели. Получите predictions для X_new без передачи цели в predict. Составьте comparison — DataFrame с индексами исходных строк 400 и 401 и столбцами prediction, actual в этом порядке. Целевые значения нужны только для столбца actual; сохраняйте исходный порядок всех десяти признаков.
Ввод и вывод
stdin не используется. Печатать через print в stdout ничего не нужно. После выполнения кода проверяются верхнеуровневые bunch, X, y, X_train, y_train, X_new, y_new, model, predictions и comparison. predictions — NumPy-массив из двух чисел; comparison содержит эти прогнозы рядом с двумя фактическими значениями цели. Сравнение двух строк показывает работу вызова predict, но не оценивает качество модели в целом.
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
