Перейти к содержанию

Линейные модели

Обзор

Линейные модели — это класс алгоритмов машинного обучения, которые предполагают линейную зависимость между признаками и целевой переменной.

Линейная регрессия

Принцип работы

Модель предсказывает непрерывное значение как взвешенную сумму признаков:

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 регрессия

Применение

  • Классификация спама
  • Диагностика заболеваний
  • Кредитный скоринг

Преимущества и недостатки

Преимущества Недостатки
Быстрое обучение Предполагают линейность
Интерпретируемость Чувствительны к выбросам
Мало гиперпараметров Требуют масштабирования признаков
Хороший базлайн Не работают со сложными паттернами

Практические советы

  1. Масштабирование: всегда применяйте StandardScaler или MinMaxScaler
  2. Регуляризация: используйте для борьбы с переобучением
  3. Интерпретация: анализируйте коэффициенты для понимания важности признаков
  4. Проверка допущений: проверяйте нормальность остатков, гомоскедастичность

Пример кода

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)

См. также