← Назад к вопросам

Что такое регуляризация дерева решений?

2.0 Middle🔥 221 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Регуляризация дерева решений

Регуляризация дерева решений — это набор методов, которые контролируют сложность модели для предотвращения переобучения. Дерево решений имеет склонность рекурсивно делить данные до тех пор, пока оно идеально не разделит обучающий набор, что приводит к плохой обобщающей способности.

Основные методы регуляризации

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}")

Почему это важно?

Без регуляризации дерево:

  • Переобучается (высокая точность на тренировке, низкая на тесте)
  • Становится чувствительным к шуму в данных
  • Теряет интерпретируемость из-за чрезмерной сложности

С регуляризацией достигаем баланса между смещением и дисперсией, получая модель с хорошей обобщающей способностью.

Что такое регуляризация дерева решений? | PrepBro