Что такое множественная регрессия?
Множественная линейная регрессия (Multiple Linear Regression) — это расширение простой линейной регрессии для случая, когда у нас есть несколько независимых переменных (признаков), влияющих на целевую переменную.
Отличие от простой регрессии:
Простая регрессия |
Множественная регрессия |
Один признак (X) |
Несколько признаков (X₁, X₂, ..., Xₙ) |
y = w·x + b |
y = w₁·x₁ + w₂·x₂ + ... + wₙ·xₙ + b |
Прямая линия на плоскости |
Гиперплоскость в многомерном пространстве |
Математическая модель
Уравнение множественной регрессии:
y = w₁·x₁ + w₂·x₂ + w₃·x₃ + ... + wₙ·xₙ + b
Где:
- y — целевая переменная (то, что предсказываем)
- x₁, x₂, ..., xₙ — признаки (независимые переменные)
- w₁, w₂, ..., wₙ — коэффициенты (веса) для каждого признака
- b — свободный член (intercept, смещение)
В матричной форме:
y = X·w + b
Где:
- X — матрица признаков размера (n_samples, n_features)
- w — вектор коэффициентов размера (n_features,)
- b — скаляр (одно число)
Практический пример
Представим, что мы предсказываем цену квартиры:
цена = 0.5·площадь + 8·комнаты - 0.3·этаж - 2·расстояние_до_метро + 15
Интерпретация:
- 0.5 → каждый м² добавляет 0.5 тыс. руб.
- 8 → каждая комната добавляет 8 тыс. руб.
- -0.3 → каждый этаж вверх уменьшает цену на 0.3 тыс. руб.
- -2 → каждый км до метро уменьшает цену на 2 тыс. руб.
- 15 → базовая цена 15 тыс. руб.
Пример расчета:
Квартира: 60 м², 2 комнаты, 5 этаж, 1 км до метро
цена = 0.5·60 + 8·2 - 0.3·5 - 2·1 + 15
= 30 + 16 - 1.5 - 2 + 15
= 57.5 тыс. руб.
Реализация в sklearn
Базовый пример:
import numpy as np
from sklearn.linear_model import LinearRegression
# Данные: [площадь, комнаты, этаж, до_метро]
X = np.array([
[50, 1, 3, 0.5],
[60, 2, 5, 1.0],
[70, 2, 7, 1.5],
[80, 3, 4, 0.8],
])
# Целевая переменная: цена
y = np.array([35, 40, 43, 50])
# Создание и обучение модели
model = LinearRegression()
model.fit(X, y)
# Получение коэффициентов
print("Коэффициенты:", model.coef_)
# Например: [0.38, 2.0, -0.37, -1.9]
print("Intercept:", model.intercept_)
# Например: 14.5
# Предсказание
new_apartment = np.array([[65, 2, 6, 1.2]])
price = model.predict(new_apartment)
print(f"Цена: {price[0]:.2f} тыс. руб.")
Реализация того же только с pandas DataFrame:
from sklearn.linear_model import LinearRegression
import pandas as pd
# Данные в виде DataFrame
df = pd.DataFrame({
'area': [50, 60, 70, 80],
'rooms': [1, 2, 2, 3],
'floor': [3, 5, 7, 4],
'metro_distance': [0.5, 1.0, 1.5, 0.8],
'price': [35, 40, 43, 50]
})
# Признаки и целевая переменная
X = df[['area', 'rooms', 'floor', 'metro_distance']]
y = df['price']
# Обучение
model = LinearRegression()
model.fit(X, y)
# Красивый вывод коэффициентов
for feature, coef in zip(X.columns, model.coef_):
print(f"{feature}: {coef:.3f}")