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

19

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

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

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

Ответы:

11

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

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

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

bayerj
источник
10

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

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

Alleo
источник
1

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

Каран Гулати
источник
0

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

eafpres
источник
0

К-1

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

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

Sycorax говорит восстановить Монику
источник