Приведи пример модели с большой дисперсией
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Примеры моделей с большой дисперсией
Модели с высокой дисперсией (high variance) — это модели, которые чувствительны к небольшим изменениям в тренировочных данных. Они часто переобучаются (overfitting) и хорошо работают на тренировочном наборе, но плохо на тестовом.
Что такое дисперсия
Дисперсия (Variance) в контексте bias-variance tradeoff показывает, как сильно предсказания модели варьируются при обучении на разных выборках данных. Высокая дисперсия означает, что модель слишком гибкая и адаптируется к конкретным особенностям (шуму) в тренировочных данных.
Практические примеры
1. Дерево решений без ограничений (Decision Tree)
Дерево решений, выращенное до максимальной глубины без pruning, является классическим примером модели с высокой дисперсией:
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# Модель с высокой дисперсией - нет ограничений
high_variance_tree = DecisionTreeClassifier(
max_depth=None, # Неограниченная глубина
min_samples_split=1, # Каждый узел может быть разбит
min_samples_leaf=1
)
X, y = make_classification(n_samples=100, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
high_variance_tree.fit(X_train, y_train)
print(f"Train accuracy: {high_variance_tree.score(X_train, y_train)}") # ~1.0
print(f"Test accuracy: {high_variance_tree.score(X_test, y_test)}") # ~0.7
Проблема: дерево идеально запоминает тренировочные данные, но не обобщается на новые данные.
2. k-NN с k=1 (Nearest Neighbor)
Модель, которая просто копирует метку ближайшего соседа, имеет максимальную дисперсию:
from sklearn.neighbors import KNeighborsClassifier
# Высокая дисперсия - памятное обучение
knn_high_variance = KNeighborsClassifier(n_neighbors=1)
knn_high_variance.fit(X_train, y_train)
print(f"Train accuracy: {knn_high_variance.score(X_train, y_train)}") # 1.0
print(f"Test accuracy: {knn_high_variance.score(X_test, y_test)}") # ~0.6
Любой отступ в данных или шум напрямую влияет на предсказания.
3. Нейронная сеть высокой сложности
Нейросеть с очень большим количеством параметров относительно размера данных:
import torch
import torch.nn as nn
class HighVarianceNetwork(nn.Module):
def __init__(self, input_size=20):
super().__init__()
self.fc1 = nn.Linear(input_size, 256) # Много параметров
self.fc2 = nn.Linear(256, 128)
self.fc3 = nn.Linear(128, 64)
self.fc4 = nn.Linear(64, 32)
self.fc5 = nn.Linear(32, 1)
# Без dropout и других регуляризаций
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
x = torch.relu(self.fc3(x))
x = torch.relu(self.fc4(x))
x = torch.sigmoid(self.fc5(x))
return x
# На 100 семплах такая сеть переобучится
4. Random Forest без ограничений
Основной лес решений, где каждое дерево выращено без ограничений:
from sklearn.ensemble import RandomForestClassifier
# Высокая дисперсия
high_variance_forest = RandomForestClassifier(
n_estimators=1000,
max_depth=None, # Неограниченная глубина деревьев
min_samples_split=1,
min_samples_leaf=1,
max_features='sqrt'
)
Как определить высокую дисперсию
Практический индикатор:
- Большой разрыв между train и test accuracy
- Train accuracy близка к 1.0, а test значительно ниже
- Модель хорошо работает на одном наборе, но плохо на другом
Как бороться с высокой дисперсией
- Регуляризация: добавить штраф за сложность модели
- Ограничить сложность: max_depth, min_samples_leaf для деревьев
- Dropout: для нейросетей
- Увеличить объем данных: больше примеров - меньше дисперсия
- Ensemble методы: усреднение предсказаний нескольких моделей
- Cross-validation: правильная оценка обобщающей способности
Высокая дисперсия — частая проблема при работе с маленькими датасетами или чрезмерно сложными моделями.