Категорично кодиране

Всичко, което трябва да знаете за категориалните данни и тяхното кодиране!

Машинното обучение е силно възхвалявана област. Твърди се, че можете да научите машината си да се учи без „изрично“ да я програмирате. Въпреки че това е вярно, много програмиране влиза в него (по-скоро имплицитно). Категоричното кодиранее стъпка на инженеринг на функции, която се изпълнява преди обучението на модел на машинно обучение.

Какво представляват категоричните данни?

Преди да говорим за категорично кодиране, първо трябва да разберем категориалните данни. Това са данните, които са разделени на крайни групи. Когато се занимаваме с проблеми с класификацията, обикновено имаме категорични данни. Така че в този случай целевите променливи са категорични данни. (Входните променливи също могат да бъдат категорични променливи.) Например пол, име на държава и филмови жанрове са примери за категорични данни. За разлика от категориалните данни има числови данни, които са непрекъснати данни; напр. теглото на човек.

Какво е категорично кодиране и защо ни е необходимо?

След като вече разбираме категоричните данни, нека поговорим за категоричното кодиране. Защо трябва да кодираме данните? Проблемът е, че ние като хора можем да разберем данните такива, каквито са, но за да ги направим разбираеми от машините, трябва да ги кодираме по начин, по който те да ги разбират.

Машините (най-вече нашите компютри, ние не кодираме робот тук :D), се нуждаят от данните да бъдат в цифров формат, за да ги разберат. Следователно ние кодираме категориални данни в числов/числов формат, като използваме категорично кодиране.

Два най-често използвани типа кодиране на категорични данни

Кодиране на етикети

Да разгледаме набор от данни, състоящ се от имена на държави; Япония, Пакистан, Канада и Китай. Сега, ако искаме да го кодираме в числа, какво можем да направим? Можем да имаме нещо, както следва:

Япония: 0

Пакистан: 1

Канада: 2

Китай: 3

Този тип кодиране, при който преобразуваме всяка уникална променлива в число, се нарича кодиране на етикети или кодиране на редове

Проблем: Кодирането по такъв начин може да накара вашия алгоритъм да мисли, че тези променливи са класирани по някакъв начин. Така че може да го приеме като Япония ‹ Пакистан ‹ Канада ‹ Китай (защото 0 ‹ 1 ‹ 2 ‹ 3). Следователно кодирането на етикети трябва да се използва само когато поредният ред също има смисъл. Например, може да се използва за работа, която се класира Junior, Middle, Senior, Lead. В такъв случай има известна връзка между тези стойности.

Нека бързо да видим как можем да използваме кодиране на етикети с помощта на Pandas;

Първо преобразуваме нашата колона, която искаме да кодираме, в тип „категория“ (индекс, съответстващ на всяка уникална променлива по азбучен ред) и след това използваме метода на категориите codes, за да кодираме по ред променливата.

Ето как можете да използвате кодиране на етикети с помощта на Sklearn;

В Sklearn има OrdinalEncoder, който можем да инициализираме и да извикаме fit_transform върху него, за да кодираме обикновено списък с променливи или колона DataFrame.

Едно горещо кодиране

Еднократното кодиране идва на помощ, когато трябва да кодираме променливи, които нямат връзка една с друга. Можем да вземем същия пример от предишния раздел (Япония, Пакистан, Канада и Китай). При one-hot кодиране създаваме двоична колона за всяка уникална променлива и само една от тези колони е true/hot (one-hot). Така че, за примера на нашите страни, ще имаме нещо подобно;

И така, във всеки от тези случаи, когато една променлива е вярна, ние оставяме стойността на нейния индекс като 1 и правим останалите 0. Следователно Япония ще бъде кодирана като 1000, Пакистан като 0100 и т.н. и т.н.

Моля, вижте примери за еднократно кодиране с помощта на Pandas и Sklearn по-долу.

Pandas използва функция с име get_dummies, която създава индикаторна/фиктивна колона за всяка от уникалните стойности на променливата, като по този начин я кодира еднократно.

Точно като кодирането на етикети, Sklearn има вградено еднократно кодиране. Инициализираме OneHotEncoder, извикваме fit_transform върху него и той връща матрица, която е еднократно кодирана спрямо предоставените стойности.

„Ето една съвместна работа“, с която можете да си поиграете, за да изследвате още повече тези два типа категорично кодиране.

Заключение

Често се гмуркаме в машинното обучение, знаейки основите за контролирано, неконтролирано обучение, класификация и регресия. Но за да работите действително на полето, е добре да знаете какви стъпки на предварителна обработка влизат в действие, преди да обучите модел. Методите за категорично кодиране не се ограничават само до двата, споменати по-горе, но те са в основата на повечето от останалите. Учените по данни трябва да разгледат индивидуалния проблем, който се опитват да разрешат, и да изберат най-подходящата схема за кодиране въз основа на това.

Ако имате въпроси, оставете ги в коментарите по-долу. Приятно учене!