значение категориального признака в нейронных сетях - PullRequest
0 голосов
/ 11 мая 2018

Предположим, что нейронная сеть (NN), где каждый пример поезда имеет множество особенностей, и одна из этих функций - это информация о поле (мужчина или женщина).

Поскольку это категориальные данные, я постоянно вижу такие вещи, как:

If male, gender = 0
If female, gender = 1

Когда NN подается входными объектами, результат (пол x любой_вес) всегда будет равен 0, если пол = мужской. И (пол x any_weight) будет равен значению веса, если пол = женский.

Мне кажется, что способность обратного распространения обновлять веса будет как-то ограничена, потому что независимо от того, как вы меняете вес, (пол х любой_вес) будет давать 0, если пол = мужской.

И с этой точки зрения звучит как лучшая идея сказать:

If male, gender = 1
If female, gender = 2

Таким образом, мы гарантируем, что результат (пол х any_weight) не будет 0.

Но я мог бы упустить что-то здесь, потому что я продолжаю видеть, что категоризация (в большинстве случаев), кажется, начинается с 0. Может быть, кто-то, имеющий больше опыта здесь, сможет лучше уточнить это и объяснить, что я здесь неправильно понимаю?

Использование 0 и 1 - это то же самое, что использование 1 и 2? Или, если нет, к какому нам идти?

1 Ответ

0 голосов
/ 11 мая 2018

Категориальные данные часто кодируются с использованием быстрого кодирования.Таким образом, в вашем случае [1,0] if male else [0,1] вы можете представить себе вектор нулей с только 1 по данному индексу.Поскольку такие разные «пути», веса будут активироваться в зависимости от того, какие функции у вас есть, что значительно упрощает использование этих функций в сети.Другим способом было бы закодировать его, используя -1 и 1, и есть другие способы стандартизации данных .

Чтобы ответить на ваш вопрос, насколько это касается многослойного персептронане должно иметь значения, когда входное значение равно 0, веса действительно не будут обновлены, но скрытые слои будут откорректированы, чтобы распознавать это, под распознаванием я подразумеваю, что у вас все еще есть смещения, которые компенсируют ввод 0 (спасибо за комментарий).Точно так же, когда ввод равен 1,2, теперь веса будут корректироваться, чтобы различать их.Для двоичных данных -1,1 работает хорошо, так как действует как включение-выключение для любого веса.Я бы порекомендовал вам опробовать свои идеи и посмотреть, что получится, есть хорошие демоверсии онлайн .

...