2013-11-28 2 views
2

У меня есть набор данных номинальных и числовых функций. Я хочу иметь возможность представлять этот набор данных, если это возможно, численно.Числовое представление Номинальных данных при сохранении семантики данных

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

ответ

2

Существует множество методов для «включения» категориальных атрибутов в виде чисел.

Например, если категориальная переменная, которая может принимать значения red, green и blue, мы можем тривиальным закодировать это как три атрибутов isRed={0,1}, isGreen={0,1} и isBlue={0,1}.

Хотя это популярно и, очевидно, «работает», многие люди ошибаются, полагая, что последующие цифровые методы обработки приведут к разумным результатам.

Если вы используете, например, k-средства в кодированном таким образом наборе данных, результат, скорее всего, не будет слишком значимым впоследствии. В частности, если вы получаете среднее значение, такое как isRed=.3 isGreen=.2 isBlue=.5 - вы не можете разумно сопоставить это с исходными данными. Хуже того, с некоторыми алгоритмами вы даже можете получить isRed=0 isGreen=0 isBlue=0.

Я предлагаю вам попробовать работать с фактами и избегать кодирования в максимально возможной степени. Если у вас есть хороший инструмент, он позволит вам использовать смешанные типы данных. Не делать попытаться сделать все числовым вектором. Этот математический вид данных весьма ограничен, и данные не дают вам всех математических предположений, которые вам необходимо извлечь из этого представления (например, метрических пространств).

1

Не делайте этого: Я пытаюсь кодировать определенные номинальные атрибуты как целые числа.

За исключением случаев, когда имеется только две перестановки для номинальной функции. Хорошо использовать любые разные целые числа (например, 1 и 3) для каждого.

Но если существует более двух перестановок, целые числа не могут использоваться. Допустим, мы назначили 1, 2 и 3 - три перестановки. Как мы видим, между 1-2 и 2-3 по сравнению с 1-3 существует более высокая связь.

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

0

Если вы используете панды, вы можете использовать функцию, называемую .get_dummies(), в столбце номинального значения. Это превратит столбец N уникальных значений в N (или если вы хотите, чтобы N-1, называемый drop_first), новые столбцы, указывающие либо 1, либо 0, если значение присутствует.

Пример:

s = pd.Series(list('abca')) 

get_dummies(s) 
    a b c 
0 1 0 0 
1 0 1 0 
2 0 0 1 
3 1 0 0