← Назад к вопросам
Приведи пример модели с одновременно маленьким смещением и низкой дисперсией
2.0 Middle🔥 131 комментариев
#Машинное обучение#Метрики и оценка моделей
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Пример модели с низким смещением и низкой дисперсией
Теоретически это идеальный случай, который редко встречается, но я расскажу, где можно к нему приблизиться.
Когда это возможно
Низкое смещение + низкая дисперсия достижимо когда:
- Задача простая — истинная функция близка к линейной
- Данных много — можно обучить сложную модель без переобучения
- Признаков правильно подобрано — они действительно объясняют целевую переменную
- Правильная регуляризация — баланс между гибкостью и стабильностью
Пример 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 |
| Стабильность по фолдам | Высокая |
Как достичь такого состояния
- Подберите модель сложности — не слишком простую, не слишком сложную
- Больше данных — дисперсия падает с ростом n
- Регуляризация — Ridge, Lasso, max_depth, min_samples_leaf
- Cross-validation для выбора гиперпараметров — контролируем оба слагаемых
- Ансамбли — снижают дисперсию без роста смещения
- Feature engineering — добавьте информативных признаков
Вывод: Идеальная ситуация с низким смещением и дисперсией достижима на простых, хорошо-структурированных задачах с достаточным объёмом данных и правильной регуляризацией. На практике это бывает 20-30% случаев.