Prezentare generală

  • Înțelegeți ce este codarea categorică a datelor
  • Aflați diferite tehnici de codificare și când să le utilizați

Introducere

Performanța unui model de învățare automată nu depinde doar de model și de hiperparametri, ci și de modul în care procesăm și alimentăm diferite tipuri de variabile către model. Deoarece majoritatea modelelor de învățare automată acceptă doar variabile numerice, preprocesarea variabilelor categorice devine un pas necesar. Trebuie să convertim aceste variabile categorice în numere, astfel încât modelul să poată înțelege și extrage informații valoroase.

datelor

Un om de știință de date obișnuit își petrece 70 - 80% din timp curățând și pregătind datele. Iar conversia datelor categorice este o activitate inevitabilă. Nu numai că ridică calitatea modelului, ci ajută și la o mai bună inginerie a caracteristicilor. Acum întrebarea este, cum procedăm? Ce metodă de codificare categorică a datelor ar trebui să folosim?

În acest articol, voi explica diferite tipuri de metode de codificare a datelor categorice cu implementare în Python.

În cazul în care doriți să învățați concepte despre știința datelor în format video, consultați cursul nostru - Introducere în știința datelor

Cuprins

  • Ce sunt datele categorice?
  • Codificare etichetă sau codificare ordinală
  • O codare fierbinte
  • Codare fictivă
  • Codificare efect
  • Codare binară
  • Codificare BaseN
  • Codare Hash
  • Codificare țintă

Ce sunt datele categorice?

Deoarece vom lucra la variabile categorice în acest articol, iată o reîmprospătare rapidă a aceluiași lucru, cu câteva exemple. Variabilele categorice sunt de obicei reprezentate ca „șiruri” sau „categorii” și au un număr finit. Iată câteva exemple:

  1. Orașul în care locuiește o persoană: Delhi, Mumbai, Ahmedabad, Bangalore etc.
  2. Departamentul în care lucrează o persoană: finanțe, resurse umane, IT, producție.
  3. Cel mai înalt grad pe care îl are o persoană: liceu, diplomă, licență, masterat, doctorat.
  4. Notele unui elev: A +, A, B +, B, B- etc.

În exemplele de mai sus, variabilele au doar valori posibile definite. Mai mult, putem vedea că există două tipuri de date categorice-

  • Date ordinale: Categoriile au o ordine inerentă
  • Date nominale: Categoriile nu au o ordine inerentă

În datele ordinale, în timp ce codificați, ar trebui să păstrați informațiile referitoare la ordinea în care este furnizată categoria. La fel ca în exemplul de mai sus, cel mai înalt grad pe care îl posedă o persoană, oferă informații vitale despre calificarea sa. Gradul este o caracteristică importantă pentru a decide dacă o persoană este potrivită pentru o postare sau nu.

În timp ce codificăm date nominale, trebuie să luăm în considerare prezența sau absența unei caracteristici. Într-un astfel de caz, nu există nicio noțiune de ordine. De exemplu, orașul în care locuiește o persoană. Pentru date, este important să păstrăm locul în care locuiește o persoană. Aici, nu avem nicio ordine sau secvență. Este egal dacă o persoană locuiește în Delhi sau Bangalore.

Pentru codificarea datelor categorice, avem un pachet python category_encoders. Următorul cod vă ajută să instalați cu ușurință.

Codificare etichetă sau codificare ordinală

Folosim această tehnică de codificare a datelor categorice atunci când caracteristica categorică este ordinală. În acest caz, păstrarea comenzii este importantă. Prin urmare, codificarea ar trebui să reflecte secvența.

În codificarea etichetelor, fiecare etichetă este convertită într-o valoare întreagă. Vom crea o variabilă care conține categoriile care reprezintă calificarea educațională a unei persoane.

O codare la cald

Folosim această tehnică de codificare categorică a datelor atunci când caracteristicile sunt nominale (nu au nicio ordine). Într-o codare la cald, pentru fiecare nivel al unei caracteristici categorice, creăm o nouă variabilă. Fiecare categorie este mapată cu o variabilă binară care conține fie 0, fie 1. Aici, 0 reprezintă absența și 1 reprezintă prezența acelei categorii.

Aceste caracteristici binare nou create sunt cunoscute sub numele de Variabile false. Numărul de variabile fictive depinde de nivelurile prezente în variabila categorică. S-ar putea să pară complicat. Să luăm un exemplu pentru a înțelege mai bine acest lucru. Să presupunem că avem un set de date cu un animal de categorie, având diferite animale precum câine, pisică, oaie, vacă, leu. Acum trebuie să codificăm cu o singură dată aceste date.

După codificare, în al doilea tabel, avem variabile fictive reprezentând fiecare o categorie în caracteristica Animal. Acum, pentru fiecare categorie care este prezentă, avem 1 în coloana categoriei respective și 0 pentru celelalte. Să vedem cum să implementăm o codificare one-hot în python.

Acum să trecem la o altă tehnică de codificare foarte interesantă și pe scară largă, adică codificarea fictivă.

Codare fictivă

Schema de codare falsă este similară cu codarea cu un singur fierbinte. Această metodă de codificare a datelor categorice transformă variabila categorică într-un set de variabile binare (cunoscute și sub numele de variabile fictive). În cazul codificării one-hot, pentru N categorii dintr-o variabilă, folosește N variabile binare. Codificarea fictivă este o mică îmbunătățire față de o codare la cald. Codificarea fictivă folosește caracteristici N-1 pentru a reprezenta N etichete/categorii.

Pentru a înțelege mai bine acest lucru, să vedem imaginea de mai jos. Aici codificăm aceleași date folosind atât tehnici de codare one-hot, cât și tehnici de codare fictive. În timp ce one-hot folosește 3 variabile pentru a reprezenta datele, în timp ce codificarea fictivă folosește 2 variabile pentru a codifica 3 categorii.

Să-l implementăm în python.

Aici, folosind argumentul drop_first, reprezentăm prima etichetă Bangalore folosind 0.

Dezavantaje ale codării One-Hot și Dummy

Un codificator la cald și un codificator fictiv sunt două scheme de codare puternice și eficiente. Acestea sunt, de asemenea, foarte populare în rândul oamenilor de știință de date, dar s-ar putea să nu fie la fel de eficiente când-

  1. Un număr mare de niveluri sunt prezente în date. Dacă există mai multe categorii într-o variabilă de caracteristică într-un astfel de caz, avem nevoie de un număr similar de variabile fictive pentru a codifica datele. De exemplu, o coloană cu 30 de valori diferite va necesita 30 de variabile noi pentru codificare.
  2. Dacă avem mai multe caracteristici categorice în setul de date, va apărea o situație similară și din nou vom ajunge să avem mai multe caracteristici binare, fiecare reprezentând caracteristica categorică și categoriile lor multiple, de exemplu un set de date având 10 sau mai multe coloane categorice.

În ambele cazuri de mai sus, aceste două scheme de codificare introduc rar în setul de date, adică mai multe coloane având 0 și câteva dintre ele având 1. Cu alte cuvinte, creează mai multe caracteristici fictive în setul de date fără a adăuga multe informații.

De asemenea, ar putea duce la o capcană variabilă Dummy. Este un fenomen în care caracteristicile sunt foarte corelate. Asta înseamnă că folosind celelalte variabile, putem prezice cu ușurință valoarea unei variabile.

Datorită creșterii masive a setului de date, codificarea încetinește învățarea modelului, împreună cu deteriorarea performanței generale, care, în cele din urmă, face ca modelul să fie scump din punct de vedere al calculului. Mai mult, folosind modele bazate pe copaci, aceste codificări nu sunt o alegere optimă.

Codificare efect:

Această tehnică de codificare este, de asemenea, cunoscută sub numele de Codificare deviere sau Codare sumă. Efectul de codificare este aproape similar cu codificarea fictivă, cu o mică diferență. În codificarea fictivă, folosim 0 și 1 pentru a reprezenta datele, dar în codificarea efectivă, folosim trei valori, adică 1.0 și -1.

Rândul care conține doar 0s în codificare fictivă este codificat ca -1 în codificare efectivă. În exemplul de codare fictivă, orașul Bangalore la indexul 4 a fost codificat ca 0000. În timp ce codificarea efectivă este reprezentată de -1-1-1-1.

Să vedem cum îl implementăm în python-

Efectul de codificare este o tehnică avansată. În cazul în care sunteți interesat să aflați mai multe despre codificarea efectelor, consultați această lucrare interesantă.

Codificator Hash

Pentru a înțelege codarea Hash este necesar să știți despre hashing. Hashing este transformarea intrării de dimensiuni arbitrare sub forma unei valori de dimensiune fixă. Folosim algoritmi de hash pentru a efectua operații de hash, adică pentru a genera valoarea hash a unei intrări. Mai mult, hashul este un proces unidirecțional, cu alte cuvinte, nu se poate genera intrare originală din reprezentarea hash.

Hashing are mai multe aplicații, cum ar fi recuperarea datelor, verificarea corupției datelor și, de asemenea, în criptarea datelor. Avem mai multe funcții hash disponibile, de exemplu, Message Digest (MD, MD2, MD5), Funcția securizată Hash (SHA0, SHA1, SHA2) și multe altele.

La fel ca codificarea cu o singură pornire, codificatorul Hash reprezintă caracteristici categorice folosind noile dimensiuni. Aici, utilizatorul poate fixa numărul de dimensiuni după transformare folosind n_component argument. Iată ce vreau să spun - O caracteristică cu 5 categorii poate fi reprezentată folosind N caracteristici noi în mod similar, o caracteristică cu 100 de categorii poate fi, de asemenea, transformată folosind N caracteristici noi. Nu sună uimitor?

În mod implicit, codificatorul Hashing îl folosește md5 algoritm de hash, dar un utilizator poate trece orice algoritm la alegere. Dacă doriți să explorați algoritmul md5, vă sugerez această lucrare.

Deoarece Hashing transformă datele în dimensiuni mai mici, poate duce la pierderea informațiilor. O altă problemă cu care se confruntă codificatorul hashing este coliziune. Deoarece aici, un număr mare de caracteristici sunt descrise în dimensiuni mai mici, prin urmare mai multe valori pot fi reprezentate de aceeași valoare hash, aceasta este cunoscută sub numele de coliziune.

Mai mult, codificatoarele hashing au avut un mare succes în unele competiții Kaggle. Este minunat să încercați dacă setul de date are caracteristici de cardinalitate ridicată.

Codare binară

Codificarea binară este o combinație de codare Hash și codare one-hot. În această schemă de codificare, caracteristica categorică este mai întâi convertită în numerică utilizând un codificator ordinal. Apoi, numerele sunt transformate în număr binar. După aceea, valoarea binară este împărțită în coloane diferite.

Codificarea binară funcționează foarte bine atunci când există un număr mare de categorii. De exemplu, orașele dintr-o țară în care o companie își furnizează produsele.

Codarea binară este o schemă de codificare eficientă din punct de vedere al memoriei, deoarece folosește mai puține caracteristici decât codarea cu o singură temperatură. Mai mult, reduce blestemul dimensionalității pentru datele cu cardinalitate ridicată.

Codare bază N

Înainte de a ne scufunda în codificarea BaseN, să încercăm mai întâi să înțelegem ce este Base aici?

În sistemul numeric, baza sau radioul reprezintă numărul de cifre sau o combinație de cifre și litere utilizate pentru a reprezenta numerele. Cea mai comună bază pe care o folosim în viața noastră este 10 sau sistemul zecimal, deoarece aici folosim 10 cifre unice, adică de la 0 la 9 pentru a reprezenta toate numerele. Un alt sistem utilizat pe scară largă este binarul adică baza este 2. Folosește 0 și 1 adică 2 cifre pentru a exprima toate numerele.

Pentru codificarea binară, baza este 2, ceea ce înseamnă că convertește valorile numerice ale unei categorii în forma sa binară respectivă. Dacă doriți să modificați schema de bază a codificării, puteți utiliza codificatorul de bază N. În cazul în care categoriile sunt mai multe și codificarea binară nu este capabilă să gestioneze dimensionalitatea, atunci putem folosi o bază mai mare, cum ar fi 4 sau 8.

În exemplul de mai sus, am folosit baza 5 cunoscută și sub numele de sistemul quinar. Este similar cu exemplul codării binare. În timp ce codificarea binară reprezintă aceleași date prin 4 caracteristici noi, codificarea BaseN utilizează doar 3 variabile noi.

Prin urmare, tehnica de codificare BaseN reduce și mai mult numărul de caracteristici necesare pentru a reprezenta eficient datele și pentru a îmbunătăți utilizarea memoriei. Baza implicită pentru baza N este 2, care este echivalentă cu codarea binară.

Codificare țintă

Codificarea țintă este o tehnică de codificare baysiană.

Codificatorii Bayesieni folosesc informații din variabile dependente/țintă pentru a codifica datele categorice.

În codificarea țintă, calculăm media variabilei țintă pentru fiecare categorie și înlocuim variabila categoriei cu valoarea medie. În cazul variabilelor țintă categorice, probabilitatea posterioară a țintei înlocuiește fiecare categorie.

Efectuăm codificarea țintă doar pentru datele trenului și codificăm datele testelor folosind rezultatele obținute din setul de date de antrenament. Deși, un sistem de codare foarte eficient, are următoarele probleme responsabil pentru deteriorarea modelului de performanță-

  1. Poate duce la scurgeri țintă sau supra-montare. Pentru a aborda supradaptarea putem folosi diferite tehnici.
    1. În codificarea care nu este permisă, valoarea țintă curentă este redusă față de media generală a țintei pentru a evita scurgerile.
    2. Într-o altă metodă, putem introduce unele zgomote gaussiene în statisticile țintă. Valoarea acestui zgomot este hiperparametru față de model.
  2. A doua problemă, cu care ne putem confrunta, este distribuirea necorespunzătoare a categoriilor în tren și date de testare. Într-un astfel de caz, categoriile pot asuma valori extreme. Prin urmare, mijloacele țintă pentru categorie sunt amestecate cu media marginală a țintei.

Notă finală

Pentru a rezuma, codificarea datelor categorice este o parte inevitabilă a ingineriei caracteristicilor. Este mai important să știm ce schemă de codare ar trebui să folosim. Având în vedere setul de date cu care lucrăm și modelul pe care urmează să îl folosim. În acest articol, am văzut diverse tehnici de codificare, împreună cu problemele lor și cazuri de utilizare adecvate.

Dacă doriți să aflați mai multe despre tratarea variabilelor categorice, vă rugăm să consultați acest articol-

În cazul în care aveți comentarii, vă rugăm să ne contactați în comentariile de mai jos.

Puteți citi acest articol și pe aplicația noastră mobilă