XGBoost - разница между scale_pos_weight и class_weights - PullRequest
0 голосов
/ 19 марта 2020

Предположим, у нас есть сильно разбалансированная проблема двоичной классификации. Теперь XGBoost предоставляет нам 2 варианта управления дисбалансом классов во время обучения. Один использует параметр scale_pos_weight , в то время как другой использует параметр weights DMatrix.

Например, я могу использовать - params = {' scale_pos_weight ': некоторое значение} Или я могу указать вес класса при создании DMatrix, например - xgb = xgb.DMatrix (функции, цель, weight )

Может кто-нибудь объяснить, пожалуйста, разница между этими двумя случаями? И как баллы отличаются в обоих случаях?

1 Ответ

1 голос
/ 20 марта 2020

Разница

Как объяснено в (python) документации , scale_pos_weight - это число с плавающей запятой (т. Е. Одно значение), которое позволяет настроить порог классификации. Т.е. для настройки тенденции модели прогнозировать положительные или отрицательные значения по всему набору данных.

DMatrix 'weight аргумент требует массивоподобный объект и используется для указания " веса для каждый экземпляр". Это позволяет лучше контролировать то, как классификатор делает свои прогнозы, поскольку каждый вес используется для масштабирования оптимизируемой функции потерь.

Пример

Чтобы сделать это различие более конкретным, представьте, что мы пытаются предсказать присутствие кошек на снимках в двух сценариях ios.

Сценарий один

В этом сценарии наш набор данных состоит из изображений либо с кошкой, либо без животного вообще , Набор данных несбалансирован, на большинстве изображений нет животных. Здесь мы могли бы использовать scale_pos_weight для увеличения веса положительных (с кошками) изображений, чтобы справиться с дисбалансом.

В общем, мы склонны устанавливать scale_pos_weight пропорционально дисбалансу. Например, если 20% изображений содержат кошку, мы установим scale_positive_weight в 4. (Конечно, этот гиперпараметр должен быть установлен эмпирически, например, с использованием перекрестной проверки, но это разумное начальное значение / значение по умолчанию.)

Сценарий два

В этом сценарии наш набор данных снова несбалансирован с подобными пропорциями изображения кошки против "без кошки". Однако на этот раз он также включает в себя несколько изображений с собакой. Потенциально наш классификатор может иметь тенденцию принимать собак за кошек, снижая их эффективность, с более высоким уровнем ложноположительных результатов. В этом случае мы можем указать sh весовые коэффициенты для выборки, используя аргумент DMatrix weight. По сути, мы попытались бы оштрафовать ложных срабатываний, связанных с собакой, что было бы невозможно, если бы к общему порогу классификации применялся единственный фактор.

...