• Home
  • Chi sono
  • Risorse
  • Contatti
  • Approfondimenti
  • Cerca nel sito

Lorenzo Govoni

Business e Tecnologia

  • Big Data
  • Business
  • Excel
  • Intelligenza Artificiale

Metodi di codifica di variabili categoriali: Label Encoding vs One-Hot Encoding

variabili categoriali

Nei modelli di machine learning è prassi comune convertire le variabili categoriali, ad esempio testo, nella loro rappresentazione numerica.

I due modi più comuni per farlo sono quello di utilizzare il Label Encoder o l’One-Hot Encoder. La scelta di uno o l’altro metodo può avere un forte impatto sull’accuratezza e sulle prestazioni finali del modello.

Cosa sono le variabili categoriali?

I dati categorici, a volte detti anche nominali, sono variabili che contengono valori testuali anziché valori numerici. Questi valori spesso sono limitati a un set fisso.

Ad esempio assumi un dataset molto semplice del seguente tipo:

Animale, Ordine di Peso e Colore sono le nostre caratteristiche o variabili. Cane, Secondo o Grigio rappresentano un valore (di tipo categorico) delle tre caratteristiche.

Tra tutti i valori qui presenti, si può notare che la variabile “Ordine di Peso” ha un ordinamento naturale dei valori, cioè è ordinata per peso dal più grande al più piccolo. Questo tipo di variabile categoriale è chiamata variabile ordinale, perché è presente una relazione naturale tra i vari valori della caratteristica.

Ora che abbiamo visto cos’è una variabile categorica, vediamo i due metodi di codifica accennati nell’introduzione dell’articolo.

 

Label Encoder

Il Label Encoder è una tecnica di pre-elaborazione dei dati che permette di gestire le variabili categoriali ordinali.

Viene utilizzata allo scopo di preparare i dati da analizzare dal programma, al fine di rappresentare ogni dato in un modo che il computer possa comprendere.

Ad esempio, supponiamo che stiamo lavorando con dati categorici, in cui il dataset assume valori di cani e gatti.

Eseguire il Label Encoder su un dataset di questo tipo, altro non significa che assegnare ai due valori un numero per rappresentare quella variabile (1 per gatto e 2 per cane ad esempio).

Dando un numero a ciascuna categoria, il computer ora sa come rappresentarli, poiché il computer sa come lavorare con i numeri.

 

 

One-Hot Encoder

Immagina di avere 3 categorie di alimenti: pere, pollo e pomodoro. Usando la Label Encoding, assegneresti a ciascuno di questi un numero per categorizzarli: pere = 1, pollo = 2 e pomodoro = 3.

Ma ora, se è richiesto al modello di calcolare la media tra le categorie, farà (1 + 2 + 3)/3= 6/3 = 2. Ciò significa che secondo il modello, la media di pere, pollo e pomodoro insieme è pari a pollo.

Sì, probabilmente hai già capito: c’è un problema che spesso non funziona con le variabili categoriali.

In effetti, l’utilizzo di questa codifica e il consentire al modello di assumere un ordinamento naturale tra le categorie possono comportare scarse prestazioni o risultati imprevisti (previsioni a metà strada tra le categorie).

Invece di etichettare le cose come un numero che parte da 1 e poi aumenta per ogni categoria, andremo a cercare uno stile binario di categorizzazione, applicando pertanto un tipo di codifica differente: l’One-Hot Encoding.

Per le variabili categoriali in cui non esiste una relazione ordinale, la codifica dei numeri interi non è sufficiente.

In questo caso, è possibile applicare una codifica one-hot alla rappresentazione intera. Qui è dove viene rimossa la variabile con codifica intera e viene aggiunta una nuova variabile binaria per ciascun valore intero univoco.

Nell’esempio della variabile “color”, ci sono 3 categorie e quindi sono necessarie 3 variabili binarie. Un valore “1” viene inserito nella variabile binaria per il colore e “0” per gli altri colori.

Ad esempio Red sarà rappresentato dalla variabile binaria (1,0,0), Yellow sarà rappresentato da (0,1,0), mentre Green da (0,0,1).

L’immagine sottostante sintetizza e rappresenta quanto appena visto:

 

Quale di questi due metodi è migliore?

Come regola generale se le variabili categoriali sono ordinali, allora si tende ad utilizzare il Label Encoder, al contrario se la relazione non è ordinale, è meglio utilizzare un codificatore One-Hot.

Il vantaggio della prima è che occupa meno spazio, al contrario della seconda.

Tieni presente anche che, mentre una codifica One-Hot riduce il rumore nei dati che altrimenti sarebbe stato causato da relazioni ordinali errate, aumenta anche notevolmente la dimensionalità dei dati, fatto che comporta ulteriori problemi (ad esempio la curse of dimensionality).

Se hai problemi con molte dimensioni da analizzare, e la soluzione più vantaggiosa è quella di usare la codifica One-Hot, allora valuta l’idea di utilizzare in parallelo la Principal Component Analysis, per ridurre la dimensionalità del tuo problema anche se ciò riduce l’informazione che puoi ricavare dai dati.

 

Altri codificatori utilizzati

A volte, One-Hot e Label Encoder, anche se sono i più utilizzati, non vengono scelti come tecnica di preelaborazione. Semplicemente perché codifiche differenti generano modelli più performanti. Mi sto riferendo a:

  • Hashing Encoder: L’idea alla base di questo codificatore è relativamente semplice: invece di mantenere una mappatura uno-a-uno dei valori delle variabili categoriali alle posizioni nel vettore di caratteristiche, utilizziamo una funzione di hash per determinare la posizione della caratteristica in un vettore di dimensione inferiore.

    Ad esempio, la codifica one-hot assegnerebbe un indice univoco nel vettore della funzione a ciascun valore della funzione possibile, quindi una funzione con 1 milione di valori possibili equivarrebbe a una dimensione del vettore di 1 milione (ovvero, un indice nel vettore per ogni valore della funzione).

    Al contrario, se utilizziamo la codifica hashing, quella stessa funzione con 1 milione di valori possibili potrebbe essere convertita in un vettore con dimensioni notevolmente inferiori, ad esempio 100.000 o addirittura 10.000.

    Vale la pena provare Hashing Encoder per i dati nominali e ordinali se si dispone di funzionalità di cardinalità elevate (ossia con molti valori unici, diversi tra loro).

  • Codificatore Binario: la codifica binaria può essere pensata come un ibrido di encoder one-hot e hash. Questo tipo di codificatore crea meno funzionalità di uno One-Hot, preservando al contempo una unicità dei valori nella colonna.

    Ciò significa che tale codifica crea meno colonne della codifica One-Hot ed è quindi più efficiente in termini di memoria.

    La codifica binaria è un discreto compromesso per i dati ordinali con elevata cardinalità. 

  • LightGBM, è un framework che può gestire direttamente le variabili categoriali, usando un metodo alternativo per identificare le divisioni delle variabili.

    Utilizza algoritmi di apprendimento basati su alberi, ed è progettato per essere distribuito ed efficiente per avere maggiore velocità di allenamento e maggiore efficienza, minore utilizzo della memoria, migliore precisione, supporto dell’apprendimento parallelo e GPU e capace di gestire dati su larga scala.

 

 

Conclusione

In questo articolo abbiamo visto due tecniche di preelaborazione che vengono applicate ai dati categorici spesso utilizzate negli algoritmi di machine learning.

Mentre il Label Encoding sostituisce ad una etichetta un numero intero crescente partendo da 0, l’One-Hot Encoding converte la variabile categoriale in una rappresentazione numerica non ordinale da utilizzare negli algoritmi di apprendimento automatico.

In alcune situazioni, può succedere che entrambe le tecniche non diano i risultati sperati: si può allora provare ad utilizzare altre metodologie come il codificatore binario, quello di Hashing o il framework LightGBM.

  • Classificazione multiclasse tramite i metodi OvO e OvR
    Classificazione multiclasse tramite i metodi OvO e OvR
  • Variabili Dummy: cosa sono e perché sono utilizzate
    Variabili Dummy: cosa sono e perché sono utilizzate
  • Data Visualization: come rappresentare correttamente i dati
    Data Visualization: come rappresentare correttamente i dati
  • Text mining: il processo di estrazione del testo
    Text mining: il processo di estrazione del testo
Share
Pin1
Share
Tweet

Intelligenza Artificiale Codifica, Machine Learning

  • Home
  • Archivio
  • Risorse
  • Newsletter
  • Cerca nel sito

Copyright © 2021 · Lorenzo Govoni - Privacy Policy