Что такое bias-variance decomposition?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое 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}")
Ключевые выводы
- Trade-off неизбежен — часто нельзя одновременно минимизировать bias и variance
- Регуляризация — главный инструмент борьбы с высокой variance
- Ансамбли — комбинирование моделей часто снижает variance
- Cross-validation — помогает обнаружить проблемы с bias/variance
Bias-Variance Decomposition — это не просто теория, это практический руководство для отладки моделей и понимания, почему модель работает плохо.