Градиентные деревья решений

Подобно бэггингу и бустингу, бустинг градиента — это методология, применяемая поверх другого алгоритма машинного обучения. Неформально повышение градиента включает два типа моделей:

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

При повышении градиента на каждом шаге новая слабая модель обучается предсказывать «ошибку» текущей сильной модели (которая называется псевдореакцией ). Мы опишем «ошибку» позже. Пока предположим, что «ошибка» — это разница между прогнозом и регрессивной меткой. Затем слабая модель (то есть «ошибка») добавляется к сильной модели с отрицательным знаком, чтобы уменьшить ошибку сильной модели.

Повышение градиента является итеративным. Каждая итерация вызывает следующую формулу:

\[ F_{i+1} = F_i - f_i \]

куда:

  • $F_i$ — сильная модель на шаге $i$.
  • $f_i$ — слабая модель на шаге $i$.

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

Давайте проиллюстрируем повышение градиента на простом наборе данных регрессии, где:

  • Цель состоит в том, чтобы предсказать $y$ из $x$.
  • Сильная модель инициализируется нулевой константой: $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.

y = ... # the labels
x = ... # the features

strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.

for i in range(num_iters):

    # Error of the strong model
    error = strong_predictions - y

    # The weak model is a decision tree (see CART chapter)
    # without pruning and a maximum depth of 3.
    weak_model = tfdf.keras.CartModel(
        task=tfdf.keras.Task.REGRESSION,
        validation_ratio=0.0,
        max_depth=3)
    weak_model.fit(x=x, y=error)

    strong_model.append(weak_model)

    weak_predictions = weak_model.predict(x)[:,0]

    strong_predictions -= weak_predictions

Давайте применим этот код к следующему набору данных:

A plot of ground truth for one feature, x, and its label, y. The plot is a
series of somewhat damped sine
waves.

Рис. 25. Набор синтетических регрессионных данных с одним числовым признаком.

Вот три графика после первой итерации алгоритма повышения градиента:

Three plots. The first plot shows the prediction of the strong model, which is
a straight line of slope 0 and y-intercept 0. The second plot shows the error of
the strong model, which is a series of sine waves. The third plot shows the
prediction of the weak model, which is a set of square
waves.

Рисунок 26. Три графика после первой итерации.

Обратите внимание на следующее относительно графиков на рис. 26:

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

Первая слабая модель изучает грубое представление метки и в основном фокусируется на левой части пространства признаков (часть с наибольшим разнообразием и, следовательно, с наибольшей ошибкой для постоянной неправильной модели).

Ниже приведены те же графики для другой итерации алгоритма:

Three plots. The first plot shows the prediction of the strong model, which is
an inverse of the plot of the prediction of the weak model from the previous
Figure. The second plot shows the error of the strong model, which is a noisy
set of sine waves. The third plot shows the prediction of the weak model, which
is a couple of square
waves.

Рисунок 27. Три графика после второй итерации.

Обратите внимание на следующее относительно графиков на рис. 27:

  • Сильная модель теперь содержит предсказание слабой модели предыдущей итерации.
  • Новая ошибка сильной модели немного меньше.
  • Новый прогноз слабой модели теперь фокусируется на правой части пространства признаков.

Запускаем алгоритм еще на 8 итераций:

The plots show the strong model gradually becoming closer to ground truth
while the prediction of the weak model gradually becomes, well,
weaker.

Рис. 28. Три графика после третьей и десятой итераций.

Обратите внимание, что на рисунке 28 предсказание сильной модели начинает напоминать график набора данных .

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

Предыдущие графики предлагают суть повышения градиента. Однако в этом примере отсутствуют следующие две реальные операции:

  • Усадка
  • Оптимизация листовых значений одним шагом метода Ньютона

Усадка

Слабая модель $f_i$ умножается на малое значение $\nu$ (например, $\nu = 0,1$) перед добавлением к сильной модели $F_i$. Эта небольшая величина называется усадкой . Другими словами, вместо каждой итерации используется следующая формула:

\[ F_{i+1} = F_i - f_i \]

Каждая итерация использует следующую формулу:

\[ F_{i+1} = F_i - \nu f_i \]

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

В нашем коде выше сжатие будет реализовано следующим образом:

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions