Как обучаются линейные модели
Линейные модели — это один из основных инструментов в машинном обучении, используемых для решения задач регрессии и классификации. Обучение линейных моделей включает в себя нахождение оптимальных весов для предсказания целевой переменной как линейной комбинации входных признаков. Рассмотрим этот процесс более подробно.
1. Математическая формулировка
Для набора данных с входными признаками \(X\) (матрица размера \(n \times p\), где \(n\) — количество примеров, \(p\) — количество признаков) и целевыми значениями \(y\) (вектор размера \(n\)), линейная модель предсказывает \(y\) как:
\[ \hat{y} = Xw + b \]
где \(w\) — вектор весов размера \(p\), а \(b\) — скалярное смещение (bias).
2. Функция потерь
Чтобы найти оптимальные значения \(w\) и \(b\), необходимо определить функцию потерь, которая минимизируется. В зависимости от задачи это может быть:
- Среднеквадратичная ошибка (MSE) для регрессии: \( L = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 \)
- Логистическая потеря для классификации: \( L = -\frac{1}{n} \sum_{i=1}^n [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] \)
3. Оптимизация
Для нахождения оптимальных \(w\) и \(b\), минимизирующих функцию потерь, обычно используется один из следующих методов:
- Метод наименьших квадратов: Прямой математический метод, решающий уравнение \(X^T X w = X^T y\) (может включать регуляризацию).
- Градиентный спуск: Итеративный метод оптимизации, на каждом шаге которого веса обновляются в направлении наибольшего убывания функции потерь: \[ w := w - \eta \nabla_w L \]где \(\eta\) — скорость обучения, \(\nabla_w L\) — градиент функции потерь по \(w\).
4. Регуляризация
Для предотвращения переобучения часто используют ее:
- L1-регуляризация (Lasso): добавление к функции потерь члена \(\lambda \|w\|_1\), где \(\lambda\) — параметр регуляризации.
- L2-регуляризация (Ridge): добавление к функции потерь члена \(\lambda \|w\|^2_2\).
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# Загрузка данных
data = load_boston()
X = data.data
y = data.target
# Разделение данных на обучающую и тестовую выборку
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Создание и обучение модели
model = LinearRegression()
model.fit(X_train, y_train)
# Предсказание и оценка модели
y
_pred = model.predict(X_test)
print("MSE:", mean_squared_error(y_test, y_pred))Обучение линейных моделей заключается в нахождении весов, которые минимизируют разницу между предсказанными и фактическими значениями. Это достигается через оптимизацию функции потерь, при необходимости с добавлением регуляризации для улучшения обобщающей способности модели.
May 24, 2024, easyoffer
