Регрессия в 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.
  • Сменить алгоритм — поменять одну строку; качество всегда оценивают на отдельных тестовых данных.
Проверьте себя
1. Какой шаблон методов используют модели scikit-learn?
Aload и save
Bfit (обучить) и predict (предсказать)
Copen и close
Dstart и stop
2. Чему в формуле y = k*x + b соответствуют model.coef_ и model.intercept_?
Acoef_ — это b, intercept_ — это k
Bcoef_ — это k (наклон), intercept_ — это b (сдвиг)
CОба относятся к ошибке модели
DЭто названия датасетов
3. На каких данных правильно оценивать качество обученной модели?
AНа тех же данных, на которых она обучалась
BНа отдельных данных, которых модель не видела при обучении
CКачество оценивать не нужно
DНа случайных числах
Поддержать проект