Условие
Объясните bias-variance tradeoff. Как он связан с переобучением и недообучением? Как поведут себя bias и variance при: (а) увеличении глубины дерева; (б) добавлении регуляризации в линейную модель; (в) усреднении прогноза нескольких моделей (bagging)?
Решение
Подход
Любая ошибка модели в точке x раскладывается:
E[(y - ŷ(x))²] = Bias[ŷ(x)]² + Var[ŷ(x)] + σ²_noise
- Bias — систематическая ошибка модели: насколько среднее предсказание (по разным обучающим выборкам) отличается от истинного
f(x). - Variance — насколько прогноз «болтается» от выборки к выборке.
- Noise — несократимая ошибка из-за шума в данных.
Интуиция
- Слишком простая модель (linear на нелинейных данных): высокий bias, низкая variance → недообучение.
- Слишком сложная (глубокое дерево на 100 объектах): низкий bias, высокая variance → переобучение.
- Сладкая точка — баланс.
По кейсам
(а) Глубина дерева ↑:
- bias ↓ (модель ловит больше нелинейностей),
- variance ↑ (каждое разбиение чувствительно к конкретным точкам).
(б) Регуляризация (L2/L1) сильнее:
- bias ↑ (коэффициенты сжимаются — модель отходит от данных),
- variance ↓ (меньше зависимость от случайных шумов).
(в) Bagging (усреднение N деревьев):
- bias ≈ тот же (среднее несмещённых = несмещённое),
- variance ↓ в
~Nраз при независимости (для коррелированных деревьев меньше). - Random Forest = bagging + рандомизация фич → ещё меньшая корреляция между деревьями → ещё ниже variance.
Эмпирически
from sklearn.datasets import make_friedman1
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import cross_val_score
import numpy as np
X, y = make_friedman1(n_samples=500, noise=1.0, random_state=0)
for depth in [1, 2, 4, 6, 8, 12, None]:
cv = cross_val_score(DecisionTreeRegressor(max_depth=depth, random_state=0),
X, y, scoring="neg_mean_squared_error", cv=5)
print(f"depth={depth!s:>5} CV MSE = {-cv.mean():.2f} σ = {cv.std():.2f}")Видно U-образную кривую: при малой глубине ошибка велика из-за bias, при большой — из-за variance.
Когда что важнее
- Мало данных (n=100) → variance доминирует → проще модель, регуляризация.
- Много данных (n=10⁶) → variance мала → можно сложную модель (deep learning).
- Шум в y высок → variance растёт, помогают ансамбли и регуляризация.
Подводные камни
- «Сложнее = лучше» — мифу 30 лет, не сдаётся. Сложность без данных = variance.
- CV ≠ test set: CV даёт оценку ожидаемой ошибки, но variance оценить точнее на множестве независимых train-выборок.
- Bagging на сильно скоррелированных моделях не уменьшает variance — отсюда random feature subset в Random Forest.
- Boosting уменьшает bias (последовательно учится на ошибках), а не variance — поэтому переобучается при больших
n_estimators. - L1 vs L2: L2 (Ridge) сжимает все веса → плавно увеличивает bias; L1 (Lasso) обнуляет часть → даёт спарсификацию + bias.
- Bias-variance для классификации — формула другая (0-1 loss разложение не идентично), но интуиция та же.
Эталонный ответ
Error = Bias² + Variance + Noise. Переобучение = низкий bias, высокая variance. Недообучение = наоборот.
(а) Глубина дерева ↑: bias ↓, variance ↑. (б) Регуляризация ↑: bias ↑, variance ↓. (в) Bagging: bias почти не меняется, variance ↓ в N раз для некоррелированных моделей.
Цель ML — найти такой компромисс, чтобы суммарная ошибка минимальна (U-образная кривая по сложности).