GradientBoostingRegressor
GradientBoostingRegressor — ансамблевая модель регрессии, которая строит много деревьев решений последовательно.
Главная идея: каждое следующее дерево пытается исправить ошибки уже построенной модели.
Идея градиентного бустинга
Заголовок раздела «Идея градиентного бустинга»В случайном лесе деревья строятся независимо, а затем их ответы усредняются.
В градиентном бустинге деревья строятся одно за другим:
дерево 1 даёт грубый прогноздерево 2 исправляет ошибки дерева 1дерево 3 исправляет ошибки суммы деревьев 1 и 2дерево 4 исправляет оставшиеся ошибки...Итоговый прогноз получается как сумма небольших поправок, которые добавляют отдельные деревья.
Отличие от RandomForestRegressor
Заголовок раздела «Отличие от RandomForestRegressor»| Модель | Как строит деревья | Как получает прогноз |
|---|---|---|
RandomForestRegressor | много независимых деревьев | усредняет прогнозы |
GradientBoostingRegressor | цепочка деревьев | каждое дерево добавляет поправку |
Случайный лес уменьшает нестабильность одного дерева. Градиентный бустинг постепенно улучшает прогноз, исправляя ошибки предыдущих шагов.
Когда использовать
Заголовок раздела «Когда использовать»GradientBoostingRegressor полезен, когда нужна сильная модель для нелинейной зависимости.
Например, цена квартиры может зависеть от площади, числа комнат, этажа и расстояния до метро не по одной простой формуле. Бустинг может постепенно подобрать более точную зависимость.
Пример: цены квартир
Заголовок раздела «Пример: цены квартир»uses MLABC;
begin var ds := Datasets.MoscowHousing; var df := ds.Data;
var features := [ 'rooms', 'area', 'kitchen_area', 'floor', 'floors_total', 'metro_minutes' ];
var target := 'price';
var (trainDf, testDf) := df.TrainTestSplit(0.2, seed := 42);
var Xtrain := trainDf.ToMatrix(features); var ytrain := trainDf.ToVector(target);
var Xtest := testDf.ToMatrix(features); var ytest := testDf.ToVector(target);
var model := new GradientBoostingRegressor(seed := 42);
model.Fit(Xtrain, ytrain);
var pred := model.Predict(Xtest);
Println('R²:', Metrics.R2(ytest, pred):0:3);end.Вывод:
R²: 0.837R² = 0.837 означает, что модель объясняет примерно 83.7% разброса цен на тестовой выборке.
Это хороший результат, хотя в данном примере RandomForestRegressor показал более высокое значение R². На практике качество бустинга сильно зависит от параметров модели.
Основные параметры
Заголовок раздела «Основные параметры»nEstimators— сколько деревьев построить;learningRate— насколько сильно учитывать каждое новое дерево;maxDepth— максимальная глубина отдельных деревьев;seed— фиксирует случайность.
Если learningRate сделать слишком большим, модель может переобучиться. Если слишком маленьким — потребуется больше деревьев.
Преимущества
Заголовок раздела «Преимущества»- умеет строить сложные нелинейные зависимости;
- каждое новое дерево исправляет ошибки предыдущих;
- часто хорошо работает после настройки параметров.
Ограничения
Заголовок раздела «Ограничения»- чувствительнее к параметрам, чем случайный лес;
- обучается последовательно, поэтому может быть медленнее;
- хуже объясняется, чем одно дерево решений.
Что дальше
Заголовок раздела «Что дальше»Для сравнения можно вернуться к RandomForestRegressor или посмотреть метрику R2 Score, которая используется в примере.