Как перекодировать категориальную переменную в числовую переменную при использовании SVM или нейронной сети


19

Чтобы использовать SVM или нейронную сеть, необходимо преобразовать (закодировать) категориальные переменные в числовые переменные. Обычный метод в этом случае - использовать 0-1 двоичные значения с k-ным категориальным значением, преобразованным в (0,0, .. ., 1,0, ... 0) (1 находится в k-й позиции). Существуют ли другие способы сделать это, особенно когда существует большое количество категориальных значений (например, 10000), так что представление 0-1 представит большое количество дополнительных измерений (входных единиц) в нейронной сети, что кажется не совсем желательным или ожидаемым ?

Я спрашиваю об общих стратегиях.


Вы спрашиваете об общих стратегиях или о какой-то конкретной проблеме?
Денис Тарасов

Ответы:


11

В НЛП, где слова обычно кодируются как 1-k, использование встраивания слов появилось недавно. Страница википедии с ее ссылками - хорошее начало.

Общая идея состоит в том, чтобы выучить векторное представление для каждого слова где семантически похожие слова близки в этом пространстве. Следовательно, входные данные имеют размер вместо размера словаря.ИксярNяN

Может быть, вы можете перенести эту идею в ваши настройки.


10

«Стандартные» методы: однократное кодирование (которое вы упомянули в вопросе). Если существует слишком много возможных категорий, но вам нужно кодирование 0-1, вы можете использовать трюк хеширования .

Другим часто используемым методом является усреднение ответа по категории: см. Рисунок из комментария на kaggle .


1

Вы можете использовать dummyVarsв R, из caretпакета. Он автоматически создаст разные столбцы в зависимости от количества уровней. После этого вы можете использовать cbindи прикрепить к вам оригинальные данные. Другие варианты включают model.matrixи sparse.model.matrix.


0

Вы можете попробовать двоичное кодирование, которое является более компактным и иногда превосходит по быстроте. Например, вы можете реализовать категориальное встраивание в Keras.


0

К-1

«Вложения сущностей категориальных переменных» Ченга Го, Феликса Берхана

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.