Одна гаряча альтернатива кодування для великих категоричних значень?


13

Привіт, є кадр даних з великими категоричними значеннями понад 1600 категорій, чи є спосіб знайти альтернативи, щоб у мене не було понад 1600 стовпців.

Я знайшов це нижче за цікавим посиланням http://amunategui.github.io/feature-hashing/#sourcecode

Але вони перетворюються на клас / об’єкт, якого я не хочу. Я хочу, щоб мій кінцевий результат був у якості фрейму даних, щоб я міг перевірити різні моделі машинного навчання? або чи я можу використати генеровану матрицю для навчання інших моделей машинного навчання, окрім логістичної регресії чи XGBoost?

Чи все-таки я можу реалізувати?


Це справді проблема? Якщо припустити, що ви використовуєте розріджене представлення матриць, однокодування не буде справжньою проблемою.
Луї Т

@LouisT У мене мільйони записів більше 500м записів
vinaykva

І все-таки якщо його гаряче, це не матиме значення, якщо використовувати розріджену матрицю
Louis T

@LouisT Складність збільшиться, а час поїздів також збільшиться, і мої дані стануть занадто рідкими
vinaykva

1
ваша посада близько 1 року тому і, можливо, більше не зацікавлена, але якщо ви все-таки зацікавилися, чи чули ви про вбудовування об'єктів за допомогою нейронних мереж? 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


0

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.