Как выглядит уравнение линейной регрессии?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Как выглядит уравнение линейной регрессии?
Линейная регрессия — один из фундаментальных методов машинного обучения, предназначенный для предсказания непрерывной целевой переменной на основе линейного соотношения между признаками и целью.
Основное уравнение
Для одного признака (простая линейная регрессия):
y = b + w*x
Еде:
- y — целевая переменная (то, что предсказываем)
- x — признак (входные данные)
- w (weight/коэффициент) — наклон прямой, показывает как меняется y при изменении x на 1
- b (bias/свободный член) — точка пересечения с осью y, значение y когда x=0
Для нескольких признаков (множественная линейная регрессия)
y = b + w₁*x₁ + w₂*x₂ + w₃*x₃ + ... + wₙ*xₙ
Ось матричной форме (часто используется в коде):
y = b + W^T * X
или
ŷ = X * β
Еде:
- X — матрица признаков (n_samples × n_features)
- β (бета) — вектор всех параметров (включая b)
- ŷ — предсказанные значения
Математический вид с ошибкой
В реальности данные не идеально ложатся на прямую, поэтому есть ошибка:
y = b + w₁*x₁ + w₂*x₂ + ... + wₙ*xₙ + ε
Еде:
- ε (epsilon) — ошибка/остаток (residual), разница между реальным y и предсказанным
- ε ~ N(0, σ²) — предполагается нормально распределённая с нулевым средним
Практический пример на Python
import numpy as np
from sklearn.linear_model import LinearRegression
# Данные
X = np.array([[1], [2], [3], [4], [5]]) # одна переменная
y = np.array([2, 4, 5, 4, 5]) # целевая переменная
# Обучаем модель
model = LinearRegression()
model.fit(X, y)
# Получить параметры
b = model.intercept_ # свободный член (bias)
w = model.coef_[0] # коэффициент
print(f"Уравнение: y = {b:.2f} + {w:.2f}*x")
# Предсказание
X_new = np.array([[6]])
y_pred = model.predict(X_new)
print(f"При x=6, y="{y_pred[0]:.2f}")
Функция потерь (что оптимизируем)
Линейная регрессия оптимизирует Mean Squared Error (MSE):
MSE = (1/n) * Σ(y_i - ŷ_i)²
или
MSE = (1/n) * Σ(y_i - (b + w*x_i))²
Цель: найти w и b такие, что MSE минимален.
Решение через нормальные уравнения
Математическое решение в замкнутом виде:
β = (X^T * X)^(-1) * X^T * y
Это даёт оптимальные параметры без итеративной оптимизации:
# Матричное решение (не используем sklearn, чистая математика)
import numpy as np
X = np.array([[1, 1], [1, 2], [1, 3], [1, 4], [1, 5]]) # с колонкой единиц для bias
y = np.array([2, 4, 5, 4, 5])
# β = (X^T * X)^(-1) * X^T * y
beta = np.linalg.inv(X.T @ X) @ X.T @ y
print(f"b={beta[0]:.2f}, w={beta[1]:.2f}")
Что нужно знать о линейной регрессии
Предположения (Assumptions):
- Линейность — отношение между X и y линейное
- Независимость — наблюдения независимы друг от друга
- Гомоскедастичность — дисперсия ошибок постоянна (не меняется)
- Нормальность — ошибки нормально распределены
- Отсутствие мультиколлинеарности — признаки не коррелируют друг с другом
Когда использовать:
- Задачи регрессии (предсказание числовых значений)
- Интерпретируемость важна (видим вес каждого признака)
- Данные имеют приблизительно линейные отношения
Когда не использовать:
- Нелинейные данные (используй polynomial regression, tree-based models)
- Много выбросов (используй robust regression, Huber Loss)
- Очень много признаков (используй регуляризацию: Ridge, Lasso)
Расширения линейной регрессии
Ridge регрессия (L2 регуляризация):
y = b + w*x + λ*||w||²
Добавляет штраф за большие weights.
Lasso регрессия (L1 регуляризация):
y = b + w*x + λ*||w||
Может обнулять некоторые weights (feature selection).
Полиномиальная регрессия (нелинейное расширение):
y = b + w₁*x + w₂*x² + w₃*x³
Это всё ещё линейная регрессия в смысле параметров, но нелинейная по x.
Итог
Линейная регрессия описывается простым уравнением ŷ = b + w₁x₁ + ... + wₙxₙ, которое ищет наилучший линейный fit для данных, минимизируя MSE. Несмотря на простоту, остаётся одним из самых важных и часто используемых методов в ML благодаря интерпретируемости и эффективности.