Ответ
При обучении градиентного бустинга (Gradient Boosting) на каждом шаге построения нового базового алгоритма (обычно дерева) вычисляется антиградиент функции потерь относительно текущих предсказаний модели. Размерность этого градиента равна числу объектов в обучающей выборке n.
Объяснение:
Мы оптимизируем аддитивную модель F(x) = sum_{m=1}^{M} gamma_m * h_m(x), минимизируя эмпирический риск L(y, F(x)). На шаге m мы фиксируем текущую модель F_{m-1}(x) и ищем базовый алгоритм h_m(x), который лучше всего аппроксимирует антиградиент.
Градиент вычисляется для каждого объекта обучающей выборки:
g_i = - [∂L(y_i, F(x_i)) / ∂F(x_i)], где i = 1, ..., n.
Пример расчета для квадратичной ошибки (MSE) в Python:
import numpy as np
# Исходные данные: n = 5 объектов
y_true = np.array([3.0, 5.1, 2.8, 6.0, 4.2]) # Истинные значения
F_current = np.array([2.5, 4.9, 3.2, 5.5, 4.0]) # Текущие предсказания модели
# Функция потерь MSE: L(y, F) = (y - F)^2 / n
# Градиент по F: dL/dF = 2 * (F - y) / n
gradient = 2 * (F_current - y_true) / len(y_true)
print("Вектор градиента (размерность n):")
print(gradient)
print(f"Форма градиента: {gradient.shape}") # Вывод: (5,)
Как это используется в алгоритмах (XGBoost, LightGBM, CatBoost):
- Для каждого объекта вычисляется значение градиента
g_i. - Новое дерево строится так, чтобы его предсказания
h_m(x_i)были как можно ближе к-g_i(решается задача аппроксимации градиента). По сути, мы обучаем дерево регрессии на псевдо-остатках. - Для задач классификации (логистическая потеря) градиент имеет другую формулу, но его размерность по-прежнему
(n,)(или(n, n_classes)для многоклассовой).
Итог: Размерность (n,) фундаментальна, так как градиентный бустинг — это итеративная оптимизация в пространстве значений модели на конкретных обучающих точках.