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

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

Что такое переобучение?

Переобучение — распространенная проблема, которую необходимо решать при обучении модели дерева решений. Переобучение происходит, когда модель слишком близко подходит к обучающим данным и может стать менее точной при столкновении с новыми данными или прогнозировании будущих результатов. В условиях переобучения модель запоминает шум тренировочных данных и не может зафиксировать основные закономерности [1].

Подгонка в деревьях решений

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

Существуют методы предотвращения переобучения деревьев решений, которые будут обсуждаться в этой статье.

Что такое обрезка?

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

В приведенном выше примере показаны различия между усеченным и необрезанным деревом решений. Необрезанное дерево более плотное, сложное и имеет более высокую дисперсию, что приводит к переоснащению.

Предварительная обрезка

Предварительная обрезка, также известная как «Ранняя остановка» или «Упреждающая обрезка», останавливает рост дерева решений, не позволяя ему достичь полной глубины. Это останавливает генерацию несущественных ветвей в дереве решений. Предварительная обрезка включает настройку гиперпараметров перед обучением модели. Гиперпараметры – это параметры, значения которых контролируют процесс обучения и определяют значение параметров модели. Проще говоря, это любые параметры, значения которых определяются до обучения модели и остаются неизменными после его окончания. [5].

Pre-Pruning останавливает процесс построения дерева для листьев с небольшими образцами. На каждом этапе разделения дерева будет отслеживаться ошибка перекрестной проверки [2]. Если значение ошибки не продолжает уменьшаться, рост дерева останавливается.

Настройка гиперпараметров для предварительной обрезки деревьев решений

Гиперпараметры, которые можно настроить для предварительной обрезки или ранней остановки: max_depth, min_samples_leaf и min_samples_split.

  • max_depth: определяет максимальную глубину дерева. Если None, то узлы расширяются до тех пор, пока все листья не станут чистыми или пока все листья не будут содержать выборок меньше, чем min_samples_split.

Чем больше значение max_depth, тем сложнее будет дерево. При увеличении значения max_depth ошибка обучения будет уменьшаться, но это может привести к неточным прогнозам на тестовых данных (переобучению). Следовательно, правильное значение max_depth — это значение, которое приводит к наилучшему дереву решений — не занижает и не завышает данные.

  • min_samples_leaf: указывает минимальное количество выборок, необходимых для конечного узла.

Давайте рассмотрим сценарий, в котором для min_samples_leafмодели установлено значение 5, а в нашем текущем узле есть 20 образцов. Модель должна решить, где продолжить разделение на этом узле или остановиться здесь. Чтобы учесть этот параметр, модель разбивается в этом узле и проверяет количество отсчетов в левой и правой ветвях. Если оба они больше 5, то модель разделится в этом узле. Если хотя бы одна из ветвей имеет менее 5 отсчетов, это разделение не будет выполнено, и этот неразделенный узел будет конечным узлом (листом).

  • min_samples_split: указывает минимальное количество выборок, необходимых для разделения внутреннего узла.

Давайте рассмотрим сценарий, в котором для min_samples_split установлено значение 50. Тогда любой узел с менее чем 50 образцами не будет подвергаться дальнейшему разбиению. Следовательно, все конечные узлы будут иметь менее 50 отсчетов, а все внутренние узлы будут иметь отсчеты более 50 (или равных) [3].

Постобрезка

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

При пост-сокращении несущественные ветви модели удаляются с помощью метода сокращения затрат по сложности (CCP). Этот алгоритм параметризуется параметром α(≥0) или альфа, известным как параметр сложности. Функция cost_complexity_pruning_path пакета sklearn в Python вычисляет эффективные альфа-каналы и соответствующие им примеси на каждом этапе процесса сокращения.При сокращении сложности затрат , ccp_alpha или значение альфа можно настроить для получения наиболее подходящей модели дерева решений.

Как работает сокращение затрат по сложности или «сокращение самого слабого звена»?

Сокращение стоимости по сложности или «Сокращение слабых связей» работает путем расчета показателя дерева, основанного на сумме квадратов остатков (SSR) дерева или поддеревьев, а также штраф за сложность дерева (T), который зависит от количества листьев или конечных узлов в дереве или поддереве. SSR увеличивается по мере того, как деревья становятся короче, а штраф за сложность дерева компенсирует разницу в количестве листьев.

  • Оценка дерева = SSR + альфа*T, где альфа – параметр настройки, который мы находим с помощью перекрестной проверки.

Затем этот метод обрезки вычисляет различные значения альфы, давая нам последовательность деревьев от полноразмерного дерева до простого листа. Это повторяется до тех пор, пока не будет выполнена 10-кратная перекрестная проверка. Окончательное значение альфы — это то значение, которое в среднем дало нам наименьшую сумму квадратов остатков с данными тестирования [6].

Реализация пост-сокращения с помощью пакета Python sci-kit Learn

Давайте попробуем понять реализацию Post-Pruning в деревьях решений на примере прогнозирования цен на жилье. Используемый набор данных общедоступен на Kaggle.

Этот блокнот доступен в моем репозитории Github. Следующие изображения являются фрагментами из этого блокнота.

Пакет Python sklearn предоставляет функциональные возможности для реализации снижения сложности затрат с помощью функции cost_complexity_pruning_path. Он вычисляет эффективные альфа-каналы и соответствующие им примеси на каждом этапе процесса обрезки. ccp_alpha можно настроить, чтобы получить наиболее подходящую модель. С увеличением значений ccp_apha удаляется больше узлов дерева.

После обучения дерева решений до его полной длины можно реализовать функцию cost_complexity_pruning_path для получения массива значений ccp_alphas и примесей. Затем модель дерева решений можно обучить для различных значений ccp_alphas, а показатели производительности обучения и тестирования можно рассчитать для каждого альфа-значения с использованием показателей производительности или точности. Альфа-значение с наивысшей оценкой производительности данных тестирования выбирается в качестве конечного значения ccp_alpha для модели [1].

В этом примере мы можем увидеть, как можно повысить точность модели дерева решений за счет реализации сокращения сложности затрат по сравнению с деревом без сокращения. Точность модели можно повысить, настроив такие гиперпараметры, как max_depth, min_samples_leaf и min_samples_split, а также пост-обрезку.

Ссылки

[1] https://towardsdatascience.com/3-techniques-to-avoid-overfitting-of-decision-trees-1e7d3d985a09

[2] https://www.kdnuggets.com/2022/09/decision-tree-pruning-hows-whys.html

[3] https://medium.datadriveninvestor.com/decision-tree-adventures-2-explanation-of-decision-tree-classifier-parameters-84776f39a28

[4] https://www.cloudyml.com/blog/decision-tree-pruning-techniques-in-python/

[5] https://towardsdatascience.com/parameters-and-hyperparameters-aa609601a9ac

[6] https://www.youtube.com/watch?v=D0efHEJsfHo