Кодирование этикеток - раскройте свои данные, закодировав их

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

Как работать с:
1. метками
2. цветами
3. местоположениями
4. периодической функцией

1. Как конвертировать этикетки

Большинство алгоритмов машинного обучения не могут работать с помеченными функциями. Строковые столбцы трудно преобразовать в числовые значения.

Давайте рассмотрим следующий набор данных о характеристиках кошек:

id    hair     breed
1     naked    sphynx
2     short    siamois
3     naked    sphynx
4     angora   ankara
..    ...      ...

Столбцы hair и breed содержат данные в строковом формате .

Чтобы преобразовать функцию hair в числовые значения, можно присвоить каждой метке волос номер. Например, naked становится 0, short становится 1 и т. Д.:

id    hair   breed
1      0     sphynx
2      1     siamois
3      0     sphynx
4      2     ankara
..    ...    ...

Этот метод кодирования меток создает иерархию между значениями волос. _6 _ / _ 7_ меньше, чем _8 _ / _ 9_ и _10 _ / _ 11_. Эта иерархия здесь не является проблемой, поскольку она отражает длину кошачьей шерсти.

Поскольку между породами кошек нет определенного порядка, применение предыдущего метода кодирования меток может ввести алгоритм в заблуждение. В этом случае лучше всего подходит метод Одно горячее кодирование. Он создает столбец по породам с логическими значениями (0-False / 1-True). Результат:

id  hair  sphynx  siamois  ankara
1    0      1        0        0
2    1      0        1        0
3    0      1        0        0
4    2      0        0        1
.   ...    ...      ...      ...

Используя фиктивную матрицу, каждая порода считается независимой от других. Этот вариант кодировки ярлыков не связан с иерархией.

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

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

id   hair   sphynx   siamois
1     0      1        0         
2     1      0        1         
3     0      1        0         
4     2      0        0         
..   ...    ...      ...

Бонус. Если рассматривать породы кошек независимо друг от друга, это упрощает реальность. Например, кошка может быть наполовину сиамуа / наполовину анкарой. В нашем наборе закодированных данных мы можем легко представить это сочетание, написав 0,5 в столбцы siamois и ankara.

id   hair   sphynx   siamois
1     0      1        0         
2     1      0        0.5        
3     0      1        0         
4     2      0        0         
..   ...    ...      ...

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

2. Как преобразовать цвета

Предположим, теперь у нас есть цвет глаз для каждой кошки:

id   eyecolor
1    light_green    
2    dark_cyan
3    medium_sea_green 
4    yellow_green
..   ...

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

id  eye_red  eye_green  eye_blue
1    173       237         150    
2    70        138         139
3    105       178         117 
4    168       205         67
..   ...       ...         ...

В общем, цвет можно кодировать несколькими способами. Может потребоваться добавить информацию о прозрачности. Можно кодировать с помощью HSB (Hue Saturation Brightness) вместо RGB в зависимости от того, как используются данные.

3. Как преобразовать местоположения

Теперь рассмотрим местонахождение кошек. У нас есть названия городов, в которых они живут.

id   city
1    Paris
2    New-York
3    Cairo
4    New-York
..   ...

Вместо использования обычного метода кодирования меток, здесь мы можем заменить названия городов их координатами в десятичных градусах GPS (широта / долгота):

id  latitude   longitude
1   48.85341   2.3488
2   37.6       -95.665
3   30.06263   31.24967
4   37.6       -95.665
..  ...        ...

Как видите, мы закодировали местоположения по их географическим свойствам.

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

Эти переводы содержат и другие типы информации. Можно комбинировать показатели, чтобы обогатить набор данных.

4. Как преобразовать периодические функции

И последнее, но не менее важное: давайте сосредоточимся на циклических функциях. Теперь у нас есть среднее время, в которое кошки выходят на ночную прогулку:

id   avg_night_walk_time
1     11:30 PM
2     00:12 AM
3     10:45 PM
4     01:07 AM
..    ...

Сначала переведем его в десятичные часы:

id   avg_night_walk_time
1     23.5
2     0.2
3     22.75
4     1.12
..    ...

Итак, теперь у нас есть время между 0 и 23.99. Как люди, мы знаем, что 23:59 и 00:00 близки, но это не отображается в данных. Чтобы изменить его, мы можем преобразовать время с помощью косинуса и синуса. Он проецирует данные в круговое пространство, где 00:00 и 23:59 расположены близко друг к другу.

id   avg_nwt_cos   avg_nwt_sin
1    0.99          -0.13
2    0.99          0.05
3    0.94          -0.32
4    0.95          0.28
..   ...           ...

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

Это циклическое преобразование также следует применять к углам и периодическим процессам.

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

PS: В этой статье я не говорил о масштабировании функций, так как сосредоточился на преобразовании данных. При необходимости рассмотрите возможность масштабирования / центрирования данных после преобразования.