Нейрокомпьютинг и его применения в экономике и бизнесе



              

Кодирование категориальных переменных


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

Наиболее естественной выглядит и чаще всего используется на практике двоичное кодирование типа

n\rightarrow n
, когда имена
n
категорий кодируются значениями
n
бинарных нейронов, причем первая категория кодируется как
(1,0,0,\ldots ,0)
, вторая, соответственно -
(0,1,2,\ldots ,0)
и т.д. вплоть до
n
-ной:
(0,0,0,\ldots ,1)
. (Можно использовать биполярную кодировку, в которой нули заменяются на
-1
). Легко убедиться, что в такой симметричной кодировке расстояния между всеми векторами-категориями равны.

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

n\rightarrow m
, когда имена
n
классов кодируются
m
-битным двоичным кодом. Причем, в новой кодировке активность кодирующих нейронов должна быть равномерна: иметь приблизительно одинаковое среднее по примерам значение активации. Это гарантирует одинаковую значимость весов, соответствующих различным нейронам.

В качестве примера рассмотрим ситуацию, когда один из четырех классов (например, класс

c_1
) некой категориальной переменной представлен гораздо большим числом примеров, чем остальные:
P_1\gg P_2 \sim P_3 \sim P_4
. Простое кодирование
n\rightarrow n
привело бы к тому, что первый нейрон активировался бы гораздо чаще остальных. Соответственно, веса оставшихся нейронов имели бы меньше возможностей для обучения. Этой ситуации можно избежать, закодировав четыре класса двумя бинарными нейронами следующим образом:
c_1=(0,0), c_2=(1,0), c_3=(0,1), c_4=(1,1)
, обеспечивающим равномерную "загрузку" кодирующих нейронов.




Содержание  Назад  Вперед