Недавно я начал использовать CatBoost для быстрого создания прототипов моделей машинного обучения, вдохновленный выдающимися показателями производительности CatBoost по сравнению с XGBoost, LightGBM и h2o.
Поскольку XGBoost может принимать только числовые функции, для сравнения между CatBoost и XGBoost требуется общая предварительная обработка категориальных функций. Мне не совсем ясно, какой вид предварительной обработки использовался для кодирования категориальных функций в экспериментах по сравнительному анализу, и обоснование для того, чтобы не использовать простое однократное кодирование.
Я пытался прочитать документацию экспериментов. Насколько я понимаю, процедура кодирования категориального признака j
примерно эквивалентна следующей:
- В наборе
train
сгруппируйте ответ y
по j
, агрегируя с функцией mean
. Назовем результат df_agg_j
- Соедините слева набор
train
и df_agg_j
в категориальном столбце j
, удалите исходный категориальный столбец j
и используйте вместо него новый числовой столбец
- Соедините влево набор
valid
и df_agg_j
в категориальном столбце j
, удалите исходный категориальный столбец j
и используйте вместо него новый числовой столбец
Тем не менее я не понимаю необходимости «случайной перестановки объектов для j-го категориального признака и i-го объекта», а также для добавления 1 в числителе и 2 к знаменателю в окончательной формуле под раздел «Подготовка шпагата» документация .
Код для разделения и предварительной обработки данных можно найти здесь .
Есть ли объяснение (или некоторая ссылка в литературе) о методе, используемом для кодирования категориальных признаков в этом эксперименте, и сравнение между этим методом и кодированием в одно касание?