Что является таргетом (целевой переменной) для алгоритмов бустинга?

Ответ

Таргет (целевая переменная y) для алгоритмов бустинга (XGBoost, LightGBM, CatBoost) определяется конкретной задачей:

  • Регрессия: Непрерывное числовое значение (например, цена дома, время отклика).
  • Классификация: Метка класса. Для бинарной — 0 или 1 (или True/False). Для многоклассовой — целое число, представляющее класс.
  • Ранжирование: Релевантность (порядковый или числовой ранг).

Ключевая особенность бустинга: На каждой итерации новая базовая модель (обычно дерево) обучается не на исходном таргете, а на остатках (ансамблевых ошибках) предыдущих моделей. Алгоритм минимизирует целевую функцию, которая включает функцию потерь (например, MSE для регрессии, LogLoss для классификации) и регуляризацию.

Пример для бинарной классификации в XGBoost:

import xgboost as xgb
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# Генерация синтетических данных
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# y_train — таргет (массив из 0 и 1)
model = xgb.XGBClassifier(n_estimators=100, learning_rate=0.1, max_depth=3)
model.fit(X_train, y_train)

# Предсказание вероятностей класса 1
predictions = model.predict_proba(X_test)[:, 1]

Ответ 18+ 🔞

Давай разберёмся с этим таргетом для бустинга, а то народ иногда путается, как будто на дворе 2002-й год и мы только деревья решающие открыли.

Смотри, тут всё просто, как палка. Таргет y — это то, что мы хотим научить модель предсказывать. Всё зависит от задачи, ёпта.

  • Регрессия (например, цена хаты): Таргет — это просто число. Любое. Можешь предсказывать стоимость квартиры, время, за которое твой код накосячит, или сколько бензина твоя тачка хавает как не в себя. Непрерывная хуйня, короче.
  • Классификация (типа "котик" или "собака"): Тут таргет — это метка класса. Два класса? Тогда 0 или 1 (или True/False). Классов больше? Тогда это просто целые числа: 0, 1, 2... n. Всё, блядь, элементарно.
  • Ранжирование (что кому в выдаче впарить): Тут уже посложнее, таргет — это ранг релевантности, порядковый номер. Но это уже для продвинутых, кто в поисковиках или рекомендациях шарит.

А теперь самое сокровенное, ебать мои старые костыли. Весь фокус бустинга в чём? Новая модель (обычно дерево, конечно) на каждой итерации учится не на изначальном таргете, а на остатках — на тех косяках, которые наделали предыдущие деревья. Алгоритм как бы подтирает за всеми, сука. Он минимизирует какую-то функцию потерь (MSE, LogLoss — кому что надо) и ещё регуляризацию добавляет, чтобы модель не переобучилась и не стала пиздопроебибной.

Вот тебе живой пример на питоне, смотри, как всё просто:

import xgboost as xgb
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# Нагенерим данных из пальца
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# Вот он, наш таргет y_train — просто массив нулей и единиц, хитрая жопа
model = xgb.XGBClassifier(n_estimators=100, learning_rate=0.1, max_depth=3)
model.fit(X_train, y_train) # Заложили ему в память, что к чему

# А теперь спросим: "Ну что, мудила, какова вероятность, что это класс 1?"
predictions = model.predict_proba(X_test)[:, 1]

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