Насколько сильно позволяет ансамблирование снизить дисперсию
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Насколько сильно ансамблирование снижает дисперсию: математика и практика
Ансамблирование снижает дисперсию, но не до нуля и не бесконечно. Степень снижения зависит от корреляции между ошибками моделей.
Математическая модель
Для независимых моделей дисперсия ошибки ансамбля (простое усреднение):
Var(Ensemble) = Var(Model) / n
Где n — количество моделей. Дисперсия снижается в n раз! Но это при условии полной независимости.
В реальности есть корреляция ошибок (ρ):
Var(Ensemble) = ρ * Var(Model) + (1 - ρ) * Var(Model) / n
Анализ:
- ρ = 1 (полностью коррелированы): Var не снижается
- ρ = 0 (независимы): Var снижается в n раз
- ρ = 0.5 (полукоррелированы): Var снижается в ~2 раза при n=100
Практические примеры
Decision Trees (высокая дисперсия, низкая корреляция):
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
# Одно дерево
tree = DecisionTreeClassifier(max_depth=10, random_state=42)
score_single = cross_val_score(tree, X, y, cv=5).mean()
print(f'Single tree: {score_single:.4f}') # ~0.87
# Бэггинг из 100 деревьев
bag = BaggingClassifier(DecisionTreeClassifier(max_depth=10), n_estimators=100, random_state=42)
score_bag = cross_val_score(bag, X, y, cv=5).mean()
print(f'Bagging: {score_bag:.4f}') # ~0.95 (прирост ~8-10%)
Дисперсия снижается примерно в 8-15 раз из 100 моделей.
Логистическая регрессия (низкая дисперсия, высокая корреляция):
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
score_lr = cross_val_score(lr, X, y, cv=5).mean()
print(f'LogReg: {score_lr:.4f}') # ~0.93
bag_lr = BaggingClassifier(LogisticRegression(), n_estimators=100)
score_bag_lr = cross_val_score(bag_lr, X, y, cv=5).mean()
print(f'Bagging LogReg: {score_bag_lr:.4f}') # ~0.93 (практически нет прироста)
Дисперсия снижается примерно в 1.1-1.3 раза.
Максимальное достижимое снижение
Есть теоретический предел:
Min(Var) = ρ * Var(Model)
Это означает, что даже с бесконечным количеством моделей, дисперсия не упадёт ниже ρ * Var(Model).
Пример:
- Если ρ = 0.1, то Var может упасть максимум в 10 раз
- Если ρ = 0.5, то Var упадёт максимум в 2 раза
Как максимизировать снижение дисперсии
- Используй разнородные модели (логит, дерево, SVM) — ρ ↓
- Варьируй гиперпараметры (глубина дерева, регуляризация)
- Используй разные признаки (Feature Subsampling)
- Boosting вместо Bagging — снижает и дисперсию, и смещение
- Правильный размер подвыборки — слишком малые выборки = большая корреляция
Итоговая формула для практики
Ждаемое снижение MSE:
MSE(Ensemble) ≈ Bias^2 + ρ * Var + (1 - ρ) * Var / n
Вывод: Ансамблирование никогда не удалит дисперсию полностью, но может снизить её в 5-15 раз при хорошем выборе разнородных моделей. Максимум получается при ρ близкой к 0.