Totul despre codificarea variabilă categorică de către Baijayanta Roy către știința datelor
Convertiți o variabilă categorică în număr pentru construirea modelului de învățare automată
Baijayanta Roy
16 iulie 2019 · 13 min citit
Ultima actualizare: 12 februarie 2020

Majoritatea algoritmilor de învățare automată nu pot gestiona variabilele categorice decât dacă le convertim în valori numerice. Performanțele multor algoritmi variază în funcție de modul în care sunt codificate variabilele categorice.
Variabilele categorice pot fi împărțite în două categorii: Nominală (fără ordine specială) și Ordinală (unele ordonate).
Câteva exemple ca mai jos pentru variabila nominală:
- Roșu, galben, roz, albastru
- Singapore, Japonia, SUA, India, Coreea
- Vaca, câine, pisică, șarpe
Exemplu de variabile ordinale:
- Înalt, mediu, scăzut
- „Sunt de acord”, sunt de acord, neutru, nu sunt de acord și „nu sunt de acord”.
- Excelent, bine, rău
Există multe modalități prin care putem codifica aceste variabile categorice ca numere și le putem utiliza într-un algoritm. Pe cele mai multe le voi acoperi de la cele de bază la cele mai avansate în această postare. Voi cuprinde aceste codificări:
1) O codare la cald
2) Codificare etichetă
3) Codificare ordinală
4) Codificare Helmert
5) Codare binară
6) Codificare de frecvență
7) Codificare medie
8) Greutatea codificării dovezilor
9) Codificarea raportului de probabilitate
10) Codare Hashing
11) Codificare diferență inversă
12) Lăsați codificarea One Out
13) Codificare James-Stein
14) Codificare M-estimator
15) Codificator termometru (Se actualizează)
Pentru planificarea e x, voi folosi acest cadru de date, care are două variabile sau caracteristici independente (temperatură și culoare) și o etichetă (țintă). De asemenea, are Rec-No, care este un număr de ordine al înregistrării. Există un total de 10 înregistrări în acest cadru de date. Codul Python ar arăta ca mai jos.
Vom folosi Pandas și Scikit-learn și category_encoders (biblioteca de contribuții Scikit-learn) pentru a afișa diferite metode de codificare în Python.
În această metodă, mapăm fiecare categorie la un vector care conține 1 și 0 denotând prezența sau absența caracteristicii. Numărul de vectori depinde de numărul de categorii pentru caracteristici. Această metodă produce o mulțime de coloane care încetinesc semnificativ învățarea dacă numărul categoriei este foarte mare pentru caracteristică. Pandas are get_dummies funcție, care este destul de ușor de utilizat. Pentru eșantionul cadrului de date ar fi după cum urmează:
Scikit-learn are OneHotEncoder în acest scop, dar nu creează o coloană de caracteristici suplimentare (este necesar un alt cod, așa cum se arată în exemplul de cod de mai jos).
O codare la cald este foarte populară. Putem reprezenta toate categoriile prin N-1 (N = nr de categorie), deoarece este suficient pentru a codifica pe cea care nu este inclusă. De obicei, pentru Regresie, folosim N-1 (aruncați prima sau ultima coloană a unei caracteristici noi codate la cald), dar pentru clasificare, recomandarea este să utilizați toate cele N coloane, deoarece majoritatea algoritmului bazat pe arbori construiește un arbore bazat pe toate variabilele disponibile. O reglare la cald cu variabile binare N-1 ar trebui utilizată în regresie liniară, pentru a asigura numărul corect de grade de libertate (N-1). Regresia liniară are acces la toate caracteristicile pe măsură ce este antrenată și, prin urmare, examinează întregul set de variabile fictive. Aceasta înseamnă că variabilele binare N-1 oferă informații complete despre (reprezintă complet) variabila categorică originală regresiei liniare. Această abordare poate fi adoptată pentru orice algoritm de învățare automată care privește TOATE caracteristicile în același timp în timpul antrenamentului. De exemplu, susțineți mașini vectoriale și rețele neuronale, precum și algoritmi de grupare.
În metodele bazate pe copaci, nu vom lua în considerare niciodată eticheta suplimentară dacă renunțăm. Astfel, dacă folosim variabilele categorice într-un algoritm de învățare bazat pe copaci, este o bună practică pentru a-l codifica în N variabile binare și nu renunțați.
În această codificare, fiecărei categorii i se atribuie o valoare de la 1 la N (aici N este numărul de categorii pentru caracteristică. O problemă majoră cu această abordare este că nu există nicio relație sau ordine între aceste clase, dar algoritmul le-ar putea considera ca fiind o anumită ordine sau există o relație. În exemplul de mai jos poate arăta ca (Cold
Panda factorizează îndeplinește, de asemenea, aceeași funcție.
Facem codificare ordinală pentru a ne asigura că codificarea variabilelor păstrează natura ordinală a variabilei. Acest lucru este rezonabil numai pentru variabilele ordinale, așa cum am menționat la începutul acestui articol. Această codificare arată aproape similară cu codificarea etichetei, dar ușor diferită, deoarece codificarea etichetei nu ar lua în considerare dacă variabila este ordinală sau nu și va atribui secvența de numere întregi