Что такое регуляризация дерева решений?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Регуляризация дерева решений
Регуляризация дерева решений — это набор методов, которые контролируют сложность модели для предотвращения переобучения. Дерево решений имеет склонность рекурсивно делить данные до тех пор, пока оно идеально не разделит обучающий набор, что приводит к плохой обобщающей способности.
Основные методы регуляризации
1. Ограничение глубины дерева (max_depth)
Самый простой и эффективный метод — установить максимальную глубину дерева:
from sklearn.tree import DecisionTreeClassifier
# Ограничиваем глубину дерева
clf = DecisionTreeClassifier(max_depth=5, random_state=42)
clf.fit(X_train, y_train)
При малой глубине модель остаётся простой и хорошо обобщается на новые данные.
2. Минимальное количество образцов в листе (min_samples_leaf)
Запрещает создавать листья с очень малым числом объектов:
clf = DecisionTreeClassifier(
min_samples_leaf=10, # каждый лист минимум 10 образцов
random_state=42
)
Это предотвращает переобучение на отдельных шумных примерах.
3. Минимальное количество образцов для разделения (min_samples_split)
Определяет минимальное количество объектов в узле для попытки его разделения:
clf = DecisionTreeClassifier(
min_samples_split=20, # разделяем только если >= 20 объектов
random_state=42
)
4. Минимальное улучшение примеси (min_impurity_decrease)
Разделение узла происходит только если оно уменьшает примесь (Gini или энтропию) на заданный минимум:
clf = DecisionTreeClassifier(
min_impurity_decrease=0.01, # только значимые разделения
random_state=42
)
Постпруннинг (Pruning)
После построения полного дерева мы можем обрезать ненужные ветви, используя валидационный набор:
from sklearn.tree import DecisionTreeClassifier
import numpy as np
# Находим параметр сложности (ccp_alpha) с лучшей точностью
path = clf.cost_complexity_pruning_path(X_train, y_train)
ccp_alphas, impurities = path.ccp_alphas, path.impurities
# Строим деревья с разными alpha и выбираем оптимальное
best_alpha = find_best_alpha(X_val, y_val, ccp_alphas)
pruned_clf = DecisionTreeClassifier(ccp_alpha=best_alpha)
pruned_clf.fit(X_train, y_train)
Практический пример с кросс-валидацией
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
param_grid = {
"max_depth": [3, 5, 7, 10],
"min_samples_leaf": [5, 10, 20],
"min_samples_split": [10, 20, 30]
}
grid_search = GridSearchCV(
DecisionTreeClassifier(random_state=42),
param_grid,
cv=5,
scoring="accuracy"
)
grid_search.fit(X_train, y_train)
print(f"Лучшие параметры: {grid_search.best_params_}")
print(f"Лучшая точность: {grid_search.best_score_:.3f}")
Почему это важно?
Без регуляризации дерево:
- Переобучается (высокая точность на тренировке, низкая на тесте)
- Становится чувствительным к шуму в данных
- Теряет интерпретируемость из-за чрезмерной сложности
С регуляризацией достигаем баланса между смещением и дисперсией, получая модель с хорошей обобщающей способностью.