Категориальные переменные с большим количеством категорий в XGBoost/CatBoost

У меня вопрос по поводу случайных лесов. Представьте, что у меня есть данные о пользователях, взаимодействующих с предметами. Количество элементов велико, около 10 000. Мой случайный лес должен содержать элементы, с которыми пользователь может взаимодействовать (например, система рекомендаций). Для любого пользователя я хочу использовать функцию, которая описывает элементы, с которыми пользователь взаимодействовал в прошлом. Однако отображение функции категориального продукта в виде однократного кодирования кажется очень неэффективным для памяти, поскольку пользователь взаимодействует не более чем с парой сотен элементов максимум, а иногда и всего с 5.

Как вы будете строить случайный лес, если одна из входных функций - это категориальная переменная с ~10 000 возможных значений, а выходные данные - это категориальная переменная с ~10 000 возможных значений? Должен ли я использовать CatBoost с категориальными функциями? Или я должен использовать однократное кодирование, и если да, как вы думаете, XGBoost или CatBoost работают лучше?

3 ответа

Вы также можете попробовать встраивание сущностей, чтобы уменьшить сотни логических функций в векторы малой размерности.

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

Проверьте эту статью для получения дополнительной информации.

XGBoost не поддерживает категорические функции напрямую, вам нужно выполнить предварительную обработку, чтобы использовать его с catfeatures. Например, вы можете сделать горячее кодирование. Однократное кодирование обычно работает хорошо, если есть частые значения вашей функции кошки.

CatBoost имеет поддержку категориальных функций - как горячее кодирование, так и вычисление различной статистики по категориальным функциям. Чтобы использовать горячее кодирование, необходимо включить его с параметром one_hot_max_size, по умолчанию рассчитывается статистика. Статистика обычно работает лучше для категориальных функций со многими значениями.

Предполагая, что у вас достаточно знаний в области, вы можете создать новый категориальный столбец из существующего столбца. например:- если у вас столбец имеет значения ниже

A,B,C,D,E,F,G,H

если вы знаете, что A,B,C похожи, D,E,F похожи, а G,H похожи, то ваш новый столбец будет

Z,Z,Z,Y,Y,Y,X,X.

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

Другие вопросы по тегам