Регрессия в scikit-learn
На практике регрессию не пишут с нуля — берут готовую библиотеку. Посмотрим, как это выглядит.
Мы разобрали идею изнутри. В реальных проектах подбор коэффициентов и минимизацию ошибки берёт на себя библиотека. Самая популярная для классического ML — scikit-learn. Примеры ниже — иллюстрации: scikit-learn, numpy и pandas в браузерном песочнике не запускаются, но именно так выглядит настоящий код. Запоминайте структуру.
Минимальный пример
# Иллюстрация (scikit-learn в браузере не запустится)
from sklearn.linear_model import LinearRegression
# Признак: площадь. Метка: цена в млн руб.
X = [[40], [60], [80], [100]]
y = [8, 11, 14, 17]
model = LinearRegression()
model.fit(X, y) # обучение: подбор k и b
print("Наклон k:", model.coef_) # коэффициент при признаке
print("Сдвиг b:", model.intercept_) # свободный член
print("Прогноз для 70 м2:", model.predict([[70]]))
Здесь видна та же формула y = k*x + b из прошлого урока: model.coef_ — это k, а model.intercept_ — b. Библиотека лишь подобрала их за вас, минимизируя ошибку.
Несколько признаков
Добавить признаки — просто расширить строки в X. Остальное не меняется:
# Иллюстрация: два признака — площадь и число комнат
from sklearn.linear_model import LinearRegression
X = [[40, 1], [60, 2], [80, 3], [100, 4]]
y = [8, 11, 14, 17]
model = LinearRegression()
model.fit(X, y)
# Прогноз для квартиры 70 м2, 2 комнаты
print(model.predict([[70, 2]]))
Оценка качества
После обучения важно понять, насколько модель хороша. У scikit-learn есть готовые метрики; для регрессии часто берут MSE (его мы считали руками) и коэффициент детерминации R². Главное правило, которое мы подробно разберём позже: оценивать модель надо на данных, которых она не видела при обучении.
# Иллюстрация: оценка ошибки на тестовых данных
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
model = LinearRegression()
model.fit(X_train, y_train) # учим на обучающей выборке
y_pred = model.predict(X_test) # предсказываем на тестовой
mse = mean_squared_error(y_test, y_pred)
print("MSE на тесте:", mse)
Не только прямые
scikit-learn — это десятки моделей с одинаковым интерфейсом fit/predict. Кроме линейной регрессии есть деревья решений, случайный лес, градиентный бустинг и другие методы, которые ловят нелинейные зависимости. Прелесть единого интерфейса: попробовать другую модель — это поменять одну строку с её названием, всё остальное остаётся прежним.
| Шаг | Метод |
| Создать модель | model = LinearRegression() |
| Обучить | model.fit(X_train, y_train) |
| Предсказать | model.predict(X_new) |
| Оценить | mean_squared_error(y_test, y_pred) |
Итог
- На практике регрессию обучают готовой библиотекой, например scikit-learn.
- Интерфейс единый:
fitдля обучения,predictдля предсказания. coef_иintercept_— это знакомые намkиb.- Сменить алгоритм — поменять одну строку; качество всегда оценивают на отдельных тестовых данных.