Как строится дерево решений?

«Как строится дерево решений?» — вопрос из категории Деревья и ансамбли, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Алгоритм строит дерево решений рекурсивно, на каждом шаге выбирая признак, который наилучшим образом разделяет данные, минимизируя неоднородность (impurity) в дочерних узлах.

Основные шаги алгоритма (на примере классификации):

  1. Начать с корневого узла, содержащего все обучающие данные.
  2. Для каждого признака вычислить, насколько хорошо он разделяет данные, используя критерий (например, индекс Джини или энтропию).
  3. Выбрать признак, дающий максимальное снижение неоднородности (максимальный прирост информации).
  4. Разделить узел по выбранному признаку, создав дочерние узлы.
  5. Рекурсивно повторить шаги 2-4 для каждого дочернего узла, пока не будет выполнен критерий остановки.

Критерии остановки:

  • Достигнута максимальная глубина (max_depth).
  • Узел содержит меньше образцов, чем min_samples_split.
  • Разделение не приводит к значимому снижению неоднородности.

Пример построения с помощью scikit-learn:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier

# Загружаем данные
X, y = load_iris(return_X_y=True)

# Создаем и обучаем модель дерева решений
model = DecisionTreeClassifier(
    criterion='gini',  # Критерий для измерения качества разделения
    max_depth=3,       # Ограничиваем глубину для борьбы с переобучением
    min_samples_split=10
)
model.fit(X, y)

В результате получается древовидная структура правил if-else, интерпретируемая и визуализируемая.