Перейти к основному содержимому

Обрезка решающих деревьев

Идея метода

В итеративном построении решающих деревьев сверху вниз мы анализировали различные правила остановки, и был приведён пример, когда ранняя остановка может приводить к неоптимальным решениям, поскольку начальные правила разбиения не приводят к снижению неопределённости, а последующие - приводят.

Это ситуация весьма распространена на практике, поэтому для повышения точности прогнозов:

  1. деревья строят до самого низа (пока в узлах не останется по одному объекту или все объекты листа не будут иметь один и тот же отклик);

  2. потом обрезают лишние ветви дерева, что называется обрезкой дерева (tree pruning).

Простые подходы

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

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

Чтобы сделать поиск кандидатов на обрезку более направленным и эффективным используется алгоритм обрезки по минимальной цене.

Алгоритм обрезки по минимальной цене

В алгоритме обрезки по минимальной цене (minimal cost complexity pruning), являющегося составной частью алгоритма CART [1] дерево строится до самого низа (хотя также можно применять досрочный останов, например, по минимальному числу объектов в листьях), после чего для каждой внутренней вершины полного дерева оценивается целесообразность разрастания вершины до поддерева, сравнивая 2 ситуации:

  1. когда эта вершина имеет под собой исходное поддерево;

  2. когда эта вершина является терминальной (без поддерева под ним).

Эти ситуации проиллюстрированы ниже для вершины tt:

DT-pruning.png

Обозначим через AtA_t поддерево с корнем во внутренней вершине tt. Зададим штраф R(At)R(A_t), вычисляющий неточность прогнозов поддерева AtA_t как среднюю функцию неопределённости в листовых вершинах поддерева AtA_t. Например, для регрессии это может быть дисперсия откликов, а для классификации - частота ошибок. Усреднение необходимо производить пропорционально числу объектов, попадающих в каждый лист дерева.

Дополнительно определим регуляризованный штраф Rα(At)=R(At)+αM(At)R_\alpha(A_t)=R(A_t)+\alpha M(A_t), который, помимо штрафа за неточность прогнозов, штрафует поддерево за сложность, вычисляемую как количество листьев M(At)M(A_t) в этом поддереве. Гиперпараметр α>0\alpha>0 обозначает штраф за каждый дополнительный лист поддерева.

Найдём равновесное значение α\alpha^*, при котором регуляризованный штраф за поддерево AtA_t совпадёт с регуляризованным штрафом, когда поддерево AtA_t заменяется на его корень tt (в котором сразу будет строиться прогноз, как на рисунке выше):

Rα(At)=Rα(t)R_{\alpha^*}(A_t)=R_{\alpha^*}(t)

Это можно переписать в виде

R(At)+αM(At)=R(t)+α,R(A_t)+\alpha^* M(A_t)=R(t)+\alpha^*,

поскольку поддерево tt состоит всего из одного листа.

Отсюда равновесное α\alpha^* будет равно:

α=R(t)R(At)M(At)1\alpha^*=\frac{R(t)-R(A_t)}{M(A_t)-1}

Равновесное α\alpha^* задаёт целесообразность разрастания внутренней вершины tt в поддерево AtA_t.

Если оно равно нулю, то разрастание полностью нецелесообразно, поскольку одиночная вершина tt и образованное из неё поддерево AtA_t даёт одинаковый уровень ошибок. Но чем выше α\alpha^*, тем построение поддерева AtA_t целесообразнее, поскольку, чтобы компенсировать более высокую точность поддерева по сравнению с корнем, приходится сильнее штрафовать увеличение числа листов.

В алгоритме обрезки по минимальной цене вычисляются целесообразности α\alpha^* для каждого поддерева AtA_t полного дерева, после чего удаляется поддерево с минимальной целесообразностью. Далее α\alpha^* пересчитываются для всех оставшихся вершин (достаточно пересчитывать не для всех, а только для поддеревьев, затронутых удалением с предыдущего шага), и процесс повторяется до тех пор, пока не останется одна корневая вершина исходного дерева. Таким образом, алгоритм выдаст систему вложенных друг в друга поддеревьев:

T1T2...TK=корень первоначального дерева,T_1\supset T_2 \supset ... \supset T_K=\text{корень первоначального дерева},

среди которых выбирается поддерево, дающее максимальную точность на валидационной выборке.


Дополнительно об алгоритмах обрезки решающих деревьях вы можете прочитать в [2]. В [3] подробно разобран пример расчёт алгоритма обрезки по минимальной цене и приведены вариации алгоритма. В [4] описано применение алгоритма в библиотеке sklearn.

Литература

  1. Breiman, L., Friedman, J., Olshen, R.A., & Stone, C.J. (1984). Classification and Regression Trees (1st ed.). Chapman and Hall/CRC.

  2. Wikipedia: decision tree pruning.

  3. Webb A. R., Copsey K.D. Statistical pattern recognition. – John Wiley & Sons, 2011.

  4. Документация sklearn: post pruning decision trees with cost complexity pruning.