Линейные модели¶
Обзор¶
Линейные модели — это класс алгоритмов машинного обучения, которые предполагают линейную зависимость между признаками и целевой переменной.
Линейная регрессия¶
Принцип работы¶
Модель предсказывает непрерывное значение как взвешенную сумму признаков:
y = w₁x₁ + w₂x₂ + ... + wₙxₙ + b
где:
- y — предсказанное значение
- wᵢ — веса (коэффициенты)
- xᵢ — признаки
- b — свободный член (bias)
Функция потерь¶
Используется метод наименьших квадратов (MSE):
MSE = (1/n) * Σ(yᵢ - ŷᵢ)²
Регуляризация¶
- Ridge (L2): добавляет штраф за большие веса
- Lasso (L1): обнуляет неважные признаки
- ElasticNet: комбинация L1 и L2
Применение¶
- Прогнозирование цен
- Оценка спроса
- Анализ временных рядов
Логистическая регрессия¶
Принцип работы¶
Несмотря на название, используется для классификации. Применяет сигмоидную функцию:
P(y=1|x) = 1 / (1 + e^(-z))
где z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b
Функция потерь¶
Бинарная кросс-энтропия:
Loss = -[y·log(p) + (1-y)·log(1-p)]
Многоклассовая классификация¶
- One-vs-Rest (OvR)
- Softmax регрессия
Применение¶
- Классификация спама
- Диагностика заболеваний
- Кредитный скоринг
Преимущества и недостатки¶
| Преимущества | Недостатки |
|---|---|
| Быстрое обучение | Предполагают линейность |
| Интерпретируемость | Чувствительны к выбросам |
| Мало гиперпараметров | Требуют масштабирования признаков |
| Хороший базлайн | Не работают со сложными паттернами |
Практические советы¶
- Масштабирование: всегда применяйте StandardScaler или MinMaxScaler
- Регуляризация: используйте для борьбы с переобучением
- Интерпретация: анализируйте коэффициенты для понимания важности признаков
- Проверка допущений: проверяйте нормальность остатков, гомоскедастичность
Пример кода¶
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
# Подготовка данных
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Масштабирование
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Линейная регрессия
lr = LinearRegression()
lr.fit(X_train_scaled, y_train)
# Логистическая регрессия
clf = LogisticRegression(C=1.0, penalty='l2')
clf.fit(X_train_scaled, y_train)