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

Приведи пример модели с одновременно маленьким смещением и низкой дисперсией

2.0 Middle🔥 131 комментариев
#Машинное обучение#Метрики и оценка моделей

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

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

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

Пример модели с низким смещением и низкой дисперсией

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

Когда это возможно

Низкое смещение + низкая дисперсия достижимо когда:

  1. Задача простая — истинная функция близка к линейной
  2. Данных много — можно обучить сложную модель без переобучения
  3. Признаков правильно подобрано — они действительно объясняют целевую переменную
  4. Правильная регуляризация — баланс между гибкостью и стабильностью

Пример 1: Дом цены (Boston Housing)

import numpy as np
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
from sklearn.datasets import load_boston

# Исторический датасет, но иллюстративный
data = load_boston()
X, y = data.data, data.target

# Хороший сплит
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Нормализация — критично для Ridge
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# Ridge регрессия с правильным α
model = Ridge(alpha=1.0)  # Подобран через cross-validation
model.fit(X_train_scaled, y_train)

# Проверим смещение и дисперсию
train_score = model.score(X_train_scaled, y_train)  # ~0.75
test_score = model.score(X_test_scaled, y_test)     # ~0.73

print(f'Train R²: {train_score:.4f}')
print(f'Test R²: {test_score:.4f}')
print(f'Разница (переобучение): {train_score - test_score:.4f}')  # ~0.02 (мало!)

# Cross-validation для оценки дисперсии
cv_scores = cross_val_score(model, X_train_scaled, y_train, cv=5)
print(f'CV scores: {cv_scores}')
print(f'Mean CV: {cv_scores.mean():.4f}, Std: {cv_scores.std():.4f}')  # Низкий std!

Результат:

  • Смещение: низкое (R² ≈ 0.73, хорошее объяснение данных)
  • Дисперсия: низкая (train ≈ test, стабильность по фолдам)

Пример 2: Random Forest с ограничением глубины

from sklearn.ensemble import RandomForestRegressor

# Правильно настроенный Random Forest
rf = RandomForestRegressor(
    n_estimators=200,
    max_depth=10,          # Не слишком глубокие деревья
    min_samples_split=10,  # Не переучиваем на шуме
    min_samples_leaf=4,
    random_state=42,
    n_jobs=-1
)

rf.fit(X_train_scaled, y_train)

train_score = rf.score(X_train_scaled, y_train)  # ~0.88
test_score = rf.score(X_test_scaled, y_test)     # ~0.85

print(f'Train R²: {train_score:.4f}')
print(f'Test R²: {test_score:.4f}')
print(f'Разница: {train_score - test_score:.4f}')  # ~0.03

cv_scores = cross_val_score(rf, X_train_scaled, y_train, cv=5)
print(f'CV Std: {cv_scores.std():.4f}')  # Низкая дисперсия

Пример 3: Gradient Boosting с ранней остановкой

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import cross_validate

gb = GradientBoostingRegressor(
    learning_rate=0.1,
    n_estimators=200,
    max_depth=3,           # Слабые learners
    subsample=0.8,         # Stochastic boosting
    random_state=42
)

gb.fit(X_train_scaled, y_train)

train_score = gb.score(X_train_scaled, y_train)  # ~0.87
test_score = gb.score(X_test_scaled, y_test)     # ~0.84

print(f'Bias (1 - test R²): {1 - test_score:.4f}')  # ~0.16
print(f'Variance (train - test): {train_score - test_score:.4f}')  # ~0.03

Характеристики модели с низким смещением и дисперсией

МетрикаЗначение
Train R²0.85-0.90
Test R²0.80-0.88
Разница< 0.05
CV std< 0.02
Стабильность по фолдамВысокая

Как достичь такого состояния

  1. Подберите модель сложности — не слишком простую, не слишком сложную
  2. Больше данных — дисперсия падает с ростом n
  3. Регуляризация — Ridge, Lasso, max_depth, min_samples_leaf
  4. Cross-validation для выбора гиперпараметров — контролируем оба слагаемых
  5. Ансамбли — снижают дисперсию без роста смещения
  6. Feature engineering — добавьте информативных признаков

Вывод: Идеальная ситуация с низким смещением и дисперсией достижима на простых, хорошо-структурированных задачах с достаточным объёмом данных и правильной регуляризацией. На практике это бывает 20-30% случаев.

Приведи пример модели с одновременно маленьким смещением и низкой дисперсией | PrepBro