← Назад к вопросам

Что такое bias-variance decomposition?

2.7 Senior🔥 192 комментариев
#Машинное обучение#Метрики и оценка моделей

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое bias-variance decomposition?

Bias-Variance Decomposition (разложение на смещение и дисперсия) — это фундаментальная концепция в теории машинного обучения, которая объясняет, из каких компонентов складывается ошибка предсказания модели. Это ключевой инструмент для понимания trade-off между простотой и сложностью модели.

Математическое определение

Ожидаемая ошибка (MSE) может быть разложена на три компоненты:

Expected Error = Bias² + Variance + Irreducible Error

где:

  • Bias² (смещение) — систематическая ошибка из-за недостаточно сложной модели
  • Variance (дисперсия) — чувствительность модели к вариациям в обучающих данных
  • Irreducible Error — шум в данных, который нельзя уменьшить

Пример на коде

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.preprocessing import PolynomialFeatures
import numpy as np

# Синтетические данные
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# Модель с высоким BIAS (недообучена)
lr = LinearRegression()
lr.fit(X_train, y_train)
bias_error = np.mean((y_test - lr.predict(X_test))**2)  # Высокая ошибка на train и test

# Модель с высокой VARIANCE (переобучена)
poly = PolynomialFeatures(degree=15)
X_train_poly = poly.fit_transform(X_train)
X_test_poly = poly.transform(X_test)
lr_poly = LinearRegression()
lr_poly.fit(X_train_poly, y_train)
variance_error = np.mean((y_test_poly - lr_poly.predict(X_test_poly))**2)  # Маленькая на train, большая на test

# Оптимальная модель (Ridge регрессия)
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
optimal_error = np.mean((y_test - ridge.predict(X_test))**2)

Графическое представление

     Ошибка
        |
        |    _____ Variance
        |   /     \
        |  /       \
        | /         \___
        |/              \_____ Total Error
        |___________________
       /                  
      /    Bias² (сложность модели)
     /

Характеристики Bias и Variance

High Bias, Low Variance (недообучение — Underfitting):

  • Модель слишком простая
  • Плохо работает и на train, и на test
  • Примеры: линейная регрессия для нелинейных данных, дерево глубины 1

Low Bias, High Variance (переобучение — Overfitting):

  • Модель слишком сложная
  • Хорошо работает на train, плохо на test
  • Примеры: полиномиальная регрессия высокой степени, решающее дерево без ограничений

Low Bias, Low Variance (идеал):

  • Баланс между простотой и гибкостью
  • Хорошо работает на train и test
  • Примеры: правильно настроенные ансамбли, регуляризованные модели

Стратегии управления Bias-Variance Trade-off

Если модель недообучена (High Bias):

# 1. Увеличить сложность модели
from sklearn.tree import DecisionTreeRegressor
dt = DecisionTreeRegressor(max_depth=10)  # было 3

# 2. Добавить признаки (feature engineering)
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
X_new = poly.fit_transform(X)

# 3. Уменьшить регуляризацию
ridge = Ridge(alpha=0.001)  # было 10.0

Если модель переобучена (High Variance):

# 1. Увеличить регуляризацию
ridge = Ridge(alpha=10.0)
lasso = Lasso(alpha=0.1)

# 2. Уменьшить сложность модели
dt = DecisionTreeRegressor(max_depth=3)  # было 20

# 3. Добавить больше данных (если возможно)
# Early stopping для нейросетей
from tensorflow.keras.callbacks import EarlyStopping
early_stop = EarlyStopping(monitor="val_loss", patience=5)

# 4. Кросс-валидация и усреднение (ансамбли)
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(n_estimators=100)  # усреднение уменьшает variance

Практический пример в контексте ML pipeline

from sklearn.model_selection import cross_val_score

models = [
    LinearRegression(),  # Высокий bias
    PolynomialFeatures(degree=5),  # Средний bias
    RandomForestRegressor(max_depth=5),  # Сбалансированный
]

for model in models:
    train_score = model.score(X_train, y_train)
    test_score = model.score(X_test, y_test)
    cv_scores = cross_val_score(model, X, y, cv=5)
    
    print(f"Train: {train_score:.3f}, Test: {test_score:.3f}")
    print(f"CV (variance): {cv_scores.std():.3f}")

Ключевые выводы

  1. Trade-off неизбежен — часто нельзя одновременно минимизировать bias и variance
  2. Регуляризация — главный инструмент борьбы с высокой variance
  3. Ансамбли — комбинирование моделей часто снижает variance
  4. Cross-validation — помогает обнаружить проблемы с bias/variance

Bias-Variance Decomposition — это не просто теория, это практический руководство для отладки моделей и понимания, почему модель работает плохо.