Дерево решений: разбиения, глубина и интерпретация

Дерево решений строит последовательность вопросов о признаках и приходит к прогнозу в листе. Такой алгоритм умеет описывать пороги и взаимодействия без ручного создания формул,…

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

Как появляется узел

На каждом шаге алгоритм перебирает возможные признаки и пороги, например age <= 25.5. Он выбирает разбиение, после которого дочерние группы становятся более однородными по целевому ответу. Для классификации часто используют impurity по Gini или энтропии, для регрессии — уменьшение квадратной ошибки.

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

Первое дерево в scikit-learn

from sklearn.datasets import load_wine
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, export_text

X, y = load_wine(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=42, stratify=y
)

tree = DecisionTreeClassifier(
    max_depth=3,
    min_samples_leaf=5,
    random_state=42,
)
tree.fit(X_train, y_train)

print('accuracy:', accuracy_score(y_test, tree.predict(X_test)))
print(export_text(tree, max_depth=2))

Дереву не требуется стандартизация числовых признаков: порядок значений и пороги не меняются от линейного масштабирования. Пропуски и категории всё равно требуют обработки в соответствии с возможностями конкретной реализации.

Почему дерево переобучается

Без ограничений дерево может продолжать делить выборку, пока листья не станут почти уникальными. Train-ошибка уменьшается, но вопросы начинают описывать шум: редкое значение, случайную комбинацию или единичный выброс.

Основные регуляторы сложности:

Значения подбирают кросс-валидацией. Нельзя выбирать глубину по финальному test и затем сообщать эту же метрику как независимую.

Интерпретация пути

Для одного объекта можно проследить признаки и пороги от корня до листа. Это точное описание вычисления конкретного дерева, но не полное объяснение мира. Соседнее дерево, обученное на другой выборке, может принять тот же прогноз по иному пути.

Встроенная feature_importances_ суммирует уменьшение impurity и способна предпочитать признаки с большим числом возможных разбиений. Для проверки общей зависимости полезно сравнить её с permutation importance на независимой выборке.

Практика: найдите границу переобучения

Обучите деревья с глубиной от 1 до 15 и сохраните accuracy на train и validation. Постройте таблицу или график двух кривых. Найдите первую глубину, после которой обучение продолжает улучшаться, а проверка перестаёт расти. Измените min_samples_leaf и сравните устойчивость.

Что важно запомнить

Источники