Введение в ML: Градиентный Бустинг (XGBoost & CatBoost)
Цель: Освоить "тяжелую артиллерию" машинного обучения. Мы научимся использовать библиотеку XGBoost для решения задач регрессии, применим технику Early Stopping для автоматического поиска идеального числа деревьев и попробуем CatBoost для работы с категориальными данными без предварительной обработки.
Инструменты:
xgboost: Самая популярная библиотека для бустинга.catboost: Библиотека от Яндекс с поддержкой категорий "из коробки".sklearn.metrics: RMSE, ROC-AUC.
Подготовка окружения
В Google Colab библиотека xgboost обычно уже установлена, а catboost нужно доустановить. Запустите ячейку ниже перед началом работы.
Часть 1: XGBoost и Регрессия
Вернемся к датасету California Housing. В 8-й лабораторной (Линейная регрессия) наш RMSE был около 0.74 ($74,000). Посмотрим, насколько точнее будет бустинг.
Задание 1.1: Базовая модель XGBoost
- Загрузите данные
fetch_california_housing. - Разделите на Train/Test (80/20,
random_state=42). - Обучите
XGBRegressor. Используйте 100 деревьев (n_estimators=100) иlearning_rate=0.1. - Посчитайте RMSE на тесте.
Часть 2: Early Stopping (Ранняя остановка)
Главный риск бустинга — переобучение. Если поставить n_estimators=5000, модель выучит шум.
Контроль переобучения
Техника Early Stopping позволяет остановить обучение, как только ошибка на валидации перестанет падать.
Задание 2.1: Валидационный сет и Остановка
- Нам нужен отдельный кусочек данных для валидации (чтобы не подглядывать в тест). Отделите от
X_trainеще 15% подX_val(или просто передайтеeval_setвfit, используя тестовую выборку, если данных мало, но это "грех" пуристов). Для простоты используем X_test как валидацию в этом учебном примере. - Обучите модель с параметрами:
n_estimators=1000(заведомо много).learning_rate=0.05(помедленнее).early_stopping_rounds=10(если 10 раз подряд не стало лучше — стоп).eval_set=[(X_test, y_test)].
Часть 3: CatBoost и Категории
CatBoost (от Яндекс) умеет работать с текстовыми категориями (строками) без One-Hot Encoding.
Задание 3.1: Подготовка данных
- Загрузите Титаник через Seaborn.
- Оставьте колонки
['pclass', 'sex', 'age', 'embarked', 'fare', 'survived']. - Заполните пропуски в категориальных колонках строкой "Unknown", в числовых — нулем или медианой.
Важное отличие
НЕ делайте One-Hot Encoding или Label Encoding для sex и embarked. Оставьте их строками!
Часть 4: Мини-соревнование (Hyperparameter Tuning)
Вернемся к California Housing. Ваша цель — получить минимально возможный RMSE на тестовой выборке.
- Текущий рекорд (с ранней остановкой): ~0.47-0.49.
- Линейная регрессия была: ~0.74.
Задание: Попробуйте изменить параметры XGBoost вручную или циклом, чтобы побить рекорд.
Что крутить:
max_depth: Глубина дерева (обычно 3-10). Чем глубже, тем сложнее модель.learning_rate: Чем меньше (0.01), тем точнее, но нужно больше деревьев.subsample: Доля данных для обучения одного дерева (например, 0.7). Борется с переобучением.colsample_bytree: Доля признаков для одного дерева (аналог Random Forest).