Одна горячая альтернатива кодирования для больших категориальных значений?

13

У меня есть датафрейм с большими категориальными значениями более 1600 категорий, есть ли способ найти альтернативы, чтобы у меня не было более 1600 столбцов.

Я нашел эту интересную ссылку ниже http://amunategui.github.io/feature-hashing/#sourcecode

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

Есть ли способ, который я могу реализовать?

vinaykva
источник
Это действительно проблема? Предполагая, что вы используете разреженное матричное представление, однокадровое кодирование не будет реальной проблемой.
Луи Т
@LouisT У меня миллионы записей больше 500м записей
vinaykva
Тем не менее, если он горячий, не имеет значения, если использовать разреженную матрицу
Louis T
@LouisT Сложность увеличится, и время обучения также увеличится, и мои данные станут слишком редкими
vinaykva
1
Ваше сообщение около 1 года назад, и, возможно, больше не заинтересовано, но если вы все еще заинтересованы, слышали ли вы о Entity Embedding с использованием нейронных сетей? medium.com/@satnalikamayank12/...
TwinPenguins

Ответы:

10

Одним из вариантов является сопоставление редких значений с «другими». Это обычно делается, например, при обработке естественного языка - интуиция заключается в том, что очень редкие метки не обладают большой статистической силой.

Я также видел, как люди отображают 1-горячие категориальные значения в векторы более низких измерений, где каждый 1-горячий вектор повторно представляется в виде рисунка из многомерного гауссиана. См., Например, документ Deep Knowledge Tracing, в котором говорится, что этот подход мотивирован идеей сжатого зондирования:

БАРАНЮК, Р. Компрессионное зондирование. Журнал обработки сигналов IEEE 24, 4 (2007).

В частности, они отображают каждый вектор длины N на более короткий вектор длины log2 (N). Я сам этого не делал, но думаю, стоит попробовать.

Том
источник
Мне интересно, как рассчитать расстояние с такой кодировкой?
eric2323223
2

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

Этот метод также может помочь в тестировании среды поезда или когда вы читаете свои данные порциями. Я создал модуль Python, который делает все это самостоятельно. Вы можете найти его в этом репозитории GitHub - dummyPy

Краткое руководство по этому вопросу - Как быстро кодировать категориальные переменные в Python?

Яшу Сет
источник
1

Обратитесь к этой ссылке (это также связано с категориальной функцией, имеющей довольно много уникальных значений):

https://datascience.stackexchange.com/a/64021/67149

Для встраивания вы можете обратиться по ссылке ниже (не написано мной, но стоит прочитать один раз): https://medium.com/@satnalikamayank12/on-learning-embeddings-for-categorical-data-using-keras-165ff2773fc9

Amandeep
источник
0

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

Ex. для таких значений, как (облачные как - облака Нимба, моросящий дождь, небольшой дождь, дождь, сильный дождь можно преобразовать в (небольшой дождь, дождь, сильный дождь).

акаш манакше
источник