Какой вид предварительной обработки использовался для кодирования категориальных переменных в тестах CatBoost? - PullRequest
0 голосов
/ 13 января 2019

Недавно я начал использовать CatBoost для быстрого создания прототипов моделей машинного обучения, вдохновленный выдающимися показателями производительности CatBoost по сравнению с XGBoost, LightGBM и h2o.

Поскольку XGBoost может принимать только числовые функции, для сравнения между CatBoost и XGBoost требуется общая предварительная обработка категориальных функций. Мне не совсем ясно, какой вид предварительной обработки использовался для кодирования категориальных функций в экспериментах по сравнительному анализу, и обоснование для того, чтобы не использовать простое однократное кодирование.

Я пытался прочитать документацию экспериментов. Насколько я понимаю, процедура кодирования категориального признака j примерно эквивалентна следующей:

  1. В наборе train сгруппируйте ответ y по j, агрегируя с функцией mean. Назовем результат df_agg_j
  2. Соедините слева набор train и df_agg_j в категориальном столбце j, удалите исходный категориальный столбец j и используйте вместо него новый числовой столбец
  3. Соедините влево набор valid и df_agg_j в категориальном столбце j, удалите исходный категориальный столбец j и используйте вместо него новый числовой столбец

Тем не менее я не понимаю необходимости «случайной перестановки объектов для j-го категориального признака и i-го объекта», а также для добавления 1 в числителе и 2 к знаменателю в окончательной формуле под раздел «Подготовка шпагата» документация .

Код для разделения и предварительной обработки данных можно найти здесь .

Есть ли объяснение (или некоторая ссылка в литературе) о методе, используемом для кодирования категориальных признаков в этом эксперименте, и сравнение между этим методом и кодированием в одно касание?

1 Ответ

0 голосов
/ 18 января 2019

Для категориальных функций использовалась целевая статистика. В настоящее время это лучший способ предварительной обработки категориальных функций для GBDT, который работает лучше, чем one-hot. Это похоже на целевое кодирование, но использует перестановку, чтобы не иметь переопределения. Подробности и сравнения об этом подходе можно найти в документе NIPS 2018 «CatBoost: непредвзятое повышение с категориальными характеристиками» (https://arxiv.org/abs/1706.09516).

...