TGViewer
Data Science | Вопросы собесов Data Science | Вопросы собесов @easy_ds · 4.89K subscribers
Post #2629 367
🤔 Как делается прунинг деревьев?

Прунинг деревьев (или обрезка деревьев решений) — это процесс удаления ненужных ветвей в дереве, чтобы упростить модель и предотвратить переобучение. Обычно это делается путем удаления или сокращения узлов, которые добавляют мало полезной информации, что уменьшает сложность дерева без значительных потерь в точности. Существует несколько методов прунинга, включая предобрезку (pruning during tree construction) и постобрезку (pruning after tree construction), которые помогают сбалансировать общее количество узлов и глубину дерева, улучшая его обобщающую способность.

🚩До обрезки (Pre-pruning)

До обрезки включает остановку роста дерева раньше, чем оно полностью обучится. В процессе построения дерева принимаются решения о прекращении роста текущей ветви, если выполнение одного из критериев остановки.
Максимальная глубина дерева (max depth)
Останавливает рост дерева, если оно достигает определенной глубины.
Минимальное количество образцов в листе (min samples leaf)
Останавливает рост дерева, если в узле меньше определенного количества образцов.
Минимальное количество образцов для разбиения (min samples split)
Останавливает рост дерева, если меньше определенного количества образцов в узле для разбиения.
Минимальная информационная выгода (min impurity decrease)
Останавливает рост дерева, если уменьшение неопределенности после разбиения меньше определенного порога.

🚩После обрезки (Post-pruning)

После обрезки включает создание полного дерева и затем удаление некоторых его ветвей. Этот метод часто считается более эффективным, так как позволяет создать дерево с максимальной сложностью и затем упрощать его

🟠Обрезка на основе ошибки на валидационном наборе
Дерево сначала обучается до полной глубины, а затем на валидационном наборе данных удаляются ветви, которые увеличивают ошибку.
🟠Обрезка на основе критерия минимальной ошибки (cost complexity pruning)
Включает расчет ошибки для каждого поддерева и удаление тех, которые увеличивают общую ошибку меньше всего.

🚩Пример обрезки деревьев

До обрезки
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

# Загрузка данных
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)

# Модель с параметрами до обрезки
model_pre_pruning = DecisionTreeClassifier(max_depth=3, min_samples_split=4, min_samples_leaf=2)
model_pre_pruning.fit(X_train, y_train)

# Оценка модели
print(f"Точность на тестовом наборе (до обрезки): {model_pre_pruning.score(X_test, y_test)}")


После обрезки
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

# Создание и обучение дерева без обрезки
model = DecisionTreeClassifier()
model.fit(X_train, y_train)

# Построение полного дерева
plt.figure(figsize=(20,10))
plot_tree(model, filled=True)
plt.show()

# Применение после обрезки с помощью параметра cost_complexity_pruning
path = model.cost_complexity_pruning_path(X_train, y_train)
ccp_alphas, impurities = path.ccp_alphas, path.impurities

# Обучение моделей для каждого значения alpha
models = []
for ccp_alpha in ccp_alphas:
model = DecisionTreeClassifier(ccp_alpha=ccp_alpha)
model.fit(X_train, y_train)
models.append(model)

# Выбор лучшей модели на основе валидационного набора
best_model = None
best_score = 0
for model in models:
score = model.score(X_test, y_test)
if score > best_score:
best_model = model
best_score = score

# Оценка лучшей модели
print(f"Точность на тестовом наборе (после обрезки): {best_score}")


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
More from @easy_ds
  1. Oct 12, 2026Post #2701
  2. Oct 11, 2026🤔 Что такое декоратор? Это функция, модифицирующая или расширяющая поведение другой функц…
  3. Oct 11, 2026Post #2699
  4. Oct 11, 2026🤔 Как валидировать временные ряды ? Валидация временных рядов требует специальных подходо…
  5. Oct 10, 2026Post #2697
  6. Oct 10, 2026🤔 Что такое переобучение модели? Переобучение (overfitting) происходит, когда модель слиш…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →