Чтобы использовать SVM или нейронную сеть, необходимо преобразовать (закодировать) категориальные переменные в числовые переменные. Обычный метод в этом случае - использовать 0-1 двоичные значения с k-ным категориальным значением, преобразованным в (0,0, .. ., 1,0, ... 0) (1 находится в k-й позиции). Существуют ли другие способы сделать это, особенно когда существует большое количество категориальных значений (например, 10000), так что представление 0-1 представит большое количество дополнительных измерений (входных единиц) в нейронной сети, что кажется не совсем желательным или ожидаемым ?
Я спрашиваю об общих стратегиях.
Ответы:
В НЛП, где слова обычно кодируются как 1-k, использование встраивания слов появилось недавно. Страница википедии с ее ссылками - хорошее начало.
Общая идея состоит в том, чтобы выучить векторное представление для каждого слова где семантически похожие слова близки в этом пространстве. Следовательно, входные данные имеют размер вместо размера словаря.Икся∈ RN я N
Может быть, вы можете перенести эту идею в ваши настройки.
источник
«Стандартные» методы: однократное кодирование (которое вы упомянули в вопросе). Если существует слишком много возможных категорий, но вам нужно кодирование 0-1, вы можете использовать трюк хеширования .
Другим часто используемым методом является усреднение ответа по категории: см. Рисунок из комментария на kaggle .
источник
Вы можете использовать
dummyVars
в R, изcaret
пакета. Он автоматически создаст разные столбцы в зависимости от количества уровней. После этого вы можете использоватьcbind
и прикрепить к вам оригинальные данные. Другие варианты включаютmodel.matrix
иsparse.model.matrix
.источник
Вы можете попробовать двоичное кодирование, которое является более компактным и иногда превосходит по быстроте. Например, вы можете реализовать категориальное встраивание в Keras.
источник
«Вложения сущностей категориальных переменных» Ченга Го, Феликса Берхана
источник