← Назад к вопросам

Какая будет размерность градиента при обучении бустинга?

1.0 Junior🔥 121 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Какая будет размерность градиента при обучении бустинга?

Контекст: Бустинг и его компоненты

Градиентный бустинг (Gradient Boosting) — это ансамблевый метод, в котором каждый новый слабый ученик (обычно дерево решений) обучается предсказывать остатки (residuals) или градиенты ошибки предыдущих моделей. Размерность градиента зависит от типа задачи и функции потерь.

Размерность градиента в разных сценариях

1. Бинарная классификация (Binary Classification)

Для бинарной классификации с логистическими потерями:

Градиент имеет размерность: (n_samples,)

Где n_samples — количество примеров в обучающей выборке. Каждому примеру соответствует один скаляр — градиент функции потерь по предсказанию для этого примера.

# Пример: Логистическая регрессия (бинарная классификация)
# Loss = -y*log(p) - (1-y)*log(1-p), где p = sigmoid(y_pred)
# Gradient = p - y

n_samples = 1000
gradient_shape = (n_samples,)  # размерность (1000,)

2. Многоклассовая классификация (Multiclass Classification)

Для многоклассовой классификации с cross-entropy потерями:

Градиент имеет размерность: (n_samples, n_classes)

Каждому примеру соответствует вектор градиентов по всем классам.

# Пример: Многоклассовая классификация
# Loss = -sum(y_true * log(y_pred))
# Gradient = y_pred - y_true (после softmax)

n_samples = 1000
n_classes = 5
gradient_shape = (n_samples, n_classes)  # размерность (1000, 5)

3. Регрессия (Regression)

Для задачи регрессии с MSE потерями:

Градиент имеет размерность: (n_samples,)

Каждому примеру соответствует один скаляр — остаток (residual).

# Пример: MSE Loss
# Loss = (y_pred - y_true)^2
# Gradient = 2 * (y_pred - y_true)

n_samples = 1000
gradient_shape = (n_samples,)  # размерность (1000,)

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

В контексте gradient boosting градиент — это вектор, содержащий производные функции потерь по предсказаниям:

# Псевдокод обучения gradient boosting
from sklearn.ensemble import GradientBoostingClassifier

class GradientBoostingSimple:
    def fit(self, X, y):
        # Инициализируем предсказания (например, среднее)
        predictions = np.full(y.shape, np.mean(y))
        
        for iteration in range(n_estimators):
            # Вычисляем градиент ошибки
            gradient = calculate_gradient(y, predictions)  # shape: (n_samples,)
            
            # Обучаем слабого ученика на остатках
            weak_learner = DecisionTreeRegressor(max_depth=3)
            weak_learner.fit(X, gradient)
            
            # Обновляем предсказания
            predictions += learning_rate * weak_learner.predict(X)

Примеры в различных библиотеках

XGBoost (для бинарной классификации):

import xgboost as xgb

X_train = np.random.rand(1000, 20)
y_train = np.random.randint(0, 2, 1000)

model = xgb.XGBClassifier(objective='binary:logistic')
model.fit(X_train, y_train)

# Градиент имеет размерность (1000,)

LightGBM (для многоклассовой классификации):

import lightgbm as lgb

X_train = np.random.rand(1000, 20)
y_train = np.random.randint(0, 3, 1000)  # 3 класса

model = lgb.LGBMClassifier(num_class=3)
model.fit(X_train, y_train)

# Градиент имеет размерность (1000, 3)

Производная и гессиан

В некоторых реализациях (например, XGBoost) используется также вторая производная (гессиан):

# Для квадратичной аппроксимации Loss function
# grad_shape = (n_samples,) или (n_samples, n_classes)
# hess_shape = grad_shape (гессиан диагональный)

# Пример для бинарной классификации:
grad = p - y  # shape: (n_samples,)
hess = p * (1 - p)  # shape: (n_samples,)

Заключение

Размерность градиента при обучении бустинга:

  • Бинарная классификация и регрессия: (n_samples,)
  • Многоклассовая классификация: (n_samples, n_classes)

Где:

  • n_samples — количество примеров в обучающем наборе
  • n_classes — количество классов (только для многоклассовой классификации)

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

Какая будет размерность градиента при обучении бустинга? | PrepBro