Ответ
Таргет (целевая переменная 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]
Вот и вся магия. Главное — правильно таргет задать, а дальше алгоритм сам разберётся, ему лишь бы данные скормить. Доверия к нему, конечно, ебать ноль, но работает-то как часы.