Из API-интерфейса в стиле sklearn XGBClassifier Мы можем предоставить примеры для ранней остановки.

eval_set (список, необязательно) - список пар (X, y) для использования в качестве набор проверки для ранней остановки

Тем не менее, формат упоминает только пару функций и меток. Так что, если документ является точным, нет места, чтобы предоставить вес для этих примеров eval.

Я что-то упустил?

Если это не достижимо в стиле sklearn, поддерживается ли оно в оригинальном (то есть не в sklearn) API XGBClassifier? Короткий пример будет хорош, так как я никогда не использовал эту версию API.

0
Roy 25 Апр 2017 в 06:48

2 ответа

Лучший ответ

РЕДАКТИРОВАТЬ - ОБНОВЛЕНО за разговор в комментариях

Учитывая, что у вас есть целевая переменная, представляющая реальные значения прибылей / убытков, которые вы хотели бы классифицировать как «выигрыш» или «убыток», и вы хотели бы убедиться, что проверочный набор классификатора взвешивает большой абсолютный Прибыль / убыток по значению тяжелее, вот два возможных подхода:

  1. Создайте пользовательский классификатор, представляющий собой просто XGBoostRegressor, который подается в порог, в котором регрессионные прогнозы с реальными значениями преобразуются в классификации 1/0 или «выигрыш» / «убыток». Метод .fit () этого классификатора просто вызовет .fit () xgbregressor, а метод .predict () этого классификатора вызовет .predict () регрессора, а затем вернет предсказания пороговой категории.

  2. вы упомянули, что хотели бы попробовать взвесить обработку записей в вашем наборе проверки, но в xgboost для этого нет опций. Способ реализации этого заключается в реализации пользовательского eval-metric. Однако вы указали, что eval_metric должен иметь возможность возвращать оценку для одной записи метки / pred за раз, чтобы он не мог принять все значения строк и выполнить взвешивание в метрике eval. Решение, которое вы упомянули в своем комментарии, заключалось в том, чтобы «создать вызываемый объект, имеющий ссылку на все примеры проверки, передать индексы (вместо меток и баллов) в eval_set, использовать индексы для получения меток и баллов из вызываемого и возврата метрика для каждого примера валидации. " Это также должно работать.

Я бы предпочел, чтобы вариант 1 был более простым, но пробовать два разных подхода и сравнивать результаты - это, как правило, хорошая идея, если у вас есть время, поэтому вам интересно, как это получится для вас.

1
Max Power 5 Май 2017 в 13:03

Несколько недель назад для метода fit появился новый параметр sample_weight_eval_set, который позволяет вам делать именно это. Для этого требуется список весовых переменных, то есть по одной на набор оценки. Я не думаю, что эта функция превратилась в стабильную версию, но она доступна прямо сейчас, если вы компилируете xgboost из исходного кода.

https://github.com/dmlc/xgboost/blob/b018ef104f0c24efaedfbc896986ad3ed1b66774/python-package/xgboost/sklearn.py#L235

0
user667489 29 Июн 2018 в 10:26
43601256