Термін вимір є синонімом до кількості об’єктів у векторі ознак. Деякі категоріальні ознаки є низьковимірними. Нижче наведено приклад.
Назва ознаки | Кількість категорій | Приклади категорій |
---|---|---|
snowed_today (сьогодні випав сніг) | 2 | правда, неправда |
skill_level (рівень майстерності) | 3 | початківець, досвідчений спеціаліст, експерт |
season (пора року) | 4 | зима, весна, літо, осінь |
day_of_week (день тижня) | 7 | понеділок, вівторок, середа |
planet (планета) | 8 | Меркурій, Венера, Земля |
Якщо категоріальна ознака має низьку кількість можливих категорій, її можна кодувати як словник. У разі словникового кодування модель розглядає кожне можливе категоріальне значення як окрему ознаку. Під час навчання модель вивчає різні значення ваги для кожної категорії.
Припустімо, що ви створюєте модель для прогнозування ціни автомобіля, яка частково базується на категоріальній ознаці car_color
(колір автомобіля).
Можливо, червоні автомобілі дорожчі за зелені.
Оскільки виробники пропонують обмежену кількість кольорів кузова, car_color
– низьковимірна категоріальна ознака.
На ілюстрації нижче пропонується словник (можливі значення) для ознаки car_color
.
Вправа. Перевірте свою інтуїцію
"Red"
не є таким числом. Потрібно конвертувати такі рядки, як "Red"
, у числа з рухомою комою.
Індекси
Моделі машинного навчання можуть оперувати лише числами з рухомою комою. Тому слід перетворити кожен рядок на унікальний індекс, як показано на ілюстрації нижче:
Вправа. Перевірте свою інтуїцію
"Black"
(індекс 5) у 5 разів більш значущим, ніж "Orange"
(індекс 1).
"Black"
(індекс 5) у 5 разів більш значущим, ніж "Orange"
(індекс 1).
Пряме кодування
Наступний крок у створенні словника – перетворення кожного індексу в його пряме кодування. У прямому кодуванні:
- кожну категорію представляє вектор (масив) з кількістю об’єктів N, де N – кількість категорій (наприклад, якщо
car_color
має вісім можливих категорій, то векторне представлення за допомогою прямого кодування матиме вісім об’єктів); - рівно один з об’єктів вектора прямого кодування має значення 1,0; усі решта – 0,0.
Наприклад, у таблиці, наведеній нижче, показано пряме кодування для кожної ознаки car_color
.
Ознака | Червоний | Помаранчевий | Синій | Жовтий | Зелений | Чорний | Фіолетовий | Коричневий |
---|---|---|---|---|---|---|---|---|
"Red" | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
"Orange" | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
"Blue" | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
"Yellow" | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
"Green" | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
"Black" | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
"Purple" | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
"Brown" | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
У вектор ознак передається вектор прямого кодування, а не рядок чи індекс. Модель вивчає окреме значення ваги для кожного об’єкта вектора ознак.
На ілюстрації нижче показано різні трансформації в представленні словника.
Розріджене представлення
Ознака, значення якої переважно дорівнюють нулю (або пусті), називається розрідженою ознакою. Багато категоріальних ознак, таких як car_color
, мають тенденцію бути розрідженими.
Розріджене представлення означає, що позиція 1,0 зберігатиметься в розрідженому векторі. Наприклад, вектор прямого кодування для ознаки "Blue"
виглядає так:
[0, 0, 1, 0, 0, 0, 0, 0]
Оскільки 1
перебуває в позиції 2 (коли відлік починається з нуля), розріджене представлення для попереднього вектора прямого кодування виглядає так:
2
Зауважте, що розріджене представлення споживає набагато менше пам’яті, ніж восьмиоб’єктний вектор прямого кодування. Проте модель має навчатися на векторі прямого кодування, а не на розрідженому представленні.
Викиди в категорійних даних
Категорійні дані, як і числові, також містять викиди. Припустімо, що можливі значення ознаки car_color
– це не лише популярні кольори, а й деякі з тих, що використовуються рідко (викиди), наприклад "Mauve"
чи "Avocado"
.
Щоб не створювати для кожного із цих кольорів-викидів окрему категорію, їх можна об’єднати в єдину збірну категорію під назвою несловникові слова (OOV). Інакше кажучи, усі такі кольори групують в один сегмент викидів. Система вивчає для нього одне значення ваги.
Кодування високовимірних категорійних ознак
Деякі категорійні ознаки мають велику кількість вимірів. У таблиці нижче наведено приклади.
Назва ознаки | Кількість категорій | Приклади категорій |
---|---|---|
words_in_english (слова англійською) | ~500 000 | "happy", "walking" |
US_postal_codes (поштові індекси США) | ~42 000 | 02114, 90301 |
last_names_in_Germany (прізвища в Німеччині) | ~850 000 | "Schmidt", "Schneider" |
Коли категорій багато, пряме кодування зазвичай не підходить. Набагато кращим вибором стануть векторні представлення (докладну інформацію про них наведено в окремому модулі). Векторні представлення суттєво зменшують кількість вимірів, що дає дві важливі переваги:
- зазвичай модель швидше навчається;
- побудована модель зазвичай швидше робить прогнози, тобто має меншу затримку.
Хешування (або хеш-трюк) – це не такий поширений спосіб зменшити кількість вимірів.