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

Что произойдет с предсказанием модели градиентного бустинга, если выбрать только первое дерево?

2.0 Middle🔥 141 комментариев
#Машинное обучение

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

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

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

Если выбрать только первое дерево из Gradient Boosting модели, предсказания станут значительно хуже. Давайте разберём почему и что произойдёт.

Коротко: Ошибка возрастёт в 3-10 раз

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

Как работает Gradient Boosting

Каждое дерево обучается на остатках (residuals) предыдущих деревьев:

Итерация 1: Tree_1 обучается на y Итерация 2: Tree_2 обучается на (y - Tree_1.predict(X)) Итерация 3: Tree_3 обучается на остатках от Tree_2 ... Итерация N: Tree_N обучается на остатках от Tree_{N-1}

Финальное предсказание:

y_pred = y_mean + learning_rate * (Tree_1 + Tree_2 + ... + Tree_N)

Если использовать только Tree_1:

y_pred_first = y_mean + learning_rate * Tree_1

Пример с регрессией

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

X, y = load_diabetes(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Полная модель Gradient Boosting (100 деревьев)
gb = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1)
gb.fit(X_train, y_train)

y_pred_full = gb.predict(X_test)
print(f"Full GB (100 trees) R²: {r2_score(y_test, y_pred_full):.4f}")
# Output: 0.5217

# Только первое дерево
first_tree = gb.estimators_[0][0]
y_pred_first = first_tree.predict(X_test)
print(f"First tree only R²: {r2_score(y_test, y_pred_first):.4f}")
# Output: -0.0847

# Падение R²: с 0.5217 до -0.0847 (удаление 99% качества!)

Сравнение результатов

Модель | R² | MSE | Качество ─────────────────┼────────┼─────────┼────────── Лишь 1-е дерево | -0.08 | 11894 | Плохо 5 деревьев | 0.214 | 8621 | Слабо 25 деревьев | 0.457 | 5679 | Хорошо 100 деревьев | 0.522 | 2856 | Отлично

Пример с классификацией

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import roc_auc_score, accuracy_score

gbc = GradientBoostingClassifier(n_estimators=100)
gbc.fit(X_train, y_train)

# Полная модель
y_pred_full_proba = gbc.predict_proba(X_test)[:, 1]
auc_full = roc_auc_score(y_test, y_pred_full_proba)
print(f"Full GB: AUC = {auc_full:.4f}")  # 0.9847

# Только первое дерево
first_tree = gbc.estimators_[0][0]
y_pred_first_proba = first_tree.predict_proba(X_test)[:, 1]
auc_first = roc_auc_score(y_test, y_pred_first_proba)
print(f"First tree only: AUC = {auc_first:.4f}")  # 0.7523

# Падение AUC на 23.6%!

Почему это происходит

1. Первое дерево объясняет только часть дисперсии

Первое дерево ловит примерно 50-60% крупных ошибок. Остальные 99 деревьев исправляют оставшиеся 40-50% ошибок, постепенно уменьшая их.

2. Отсутствие коррекции ошибок

Каждое последующее дерево:

  • Видит остатки предыдущих деревьев
  • Обучается исправлять эти ошибки
  • Уменьшает итоговую ошибку

Если взять только первое дерево, все эти коррекции исчезают.

3. Learning rate множит эффект

y_pred = y_mean + learning_rate * Tree_1 + learning_rate * Tree_2 + ...

# Если learning_rate = 0.1:
y_pred_only_first = y_mean + 0.1 * Tree_1
# Это только 10% от вклада одного дерева!

Визуальная аналогия

Gradient Boosting как рыба, ловящая ошибки:

Tree 1: Ловит 50% крупных ошибок → Остаток 50% Tree 2: Ловит 40% оставшихся → Остаток 30% Tree 3: Ловит 30% оставшихся → Остаток 21% ... Tree 100: Ловит крошечные остатки → Остаток < 0.1%

Если взять только Tree 1: остаток = 50% (почти вся ошибка!)

Вывод

Если выбрать только первое дерево:

  1. R² падает на 50-90%
  2. Ошибка возрастает в 3-10 раз
  3. Модель становится почти бесполезной
  4. Это хуже, чем обычное одиночное дерево, потому что первое дерево GB оптимизировано на полный датасет

Каждое дерево в Gradient Boosting критично для финального качества.