Pandas Come codificare i dati con One-Hot Encoding

Come codificare i dati con One-Hot Encoding in Pandas

 

Cos’è la codifica One-Hot

 

La codifica One-Hot è una fase di pre-elaborazione dei dati per convertire i valori categorici in rappresentazioni numeriche compatibili. 

categorical_column bool_col col_1 col_2 label
value_A True 9 4 0
value_B False 7 2 0
value_D True 9 5 0
value_D False 8 3 1
value_D False 9 0 1
value_D False 5 4 1
value_B True 8 1 1
value_D True 6 6 1
value_C True 0 5 0

 

Ad esempio, per questo dataset di esempio, la colonna categorica ha molti valori stringa. Molti algoritmi di apprendimento automatico richiedono che i dati di input siano in forma numerica. Pertanto, abbiamo bisogno di un modo per convertire questo attributo di dati in una forma compatibile con tali algoritmi. Di conseguenza, suddividiamo la colonna categorica in più colonne binarie.

 

Come utilizzare la libreria Pandas per la codifica One-Hot

 

Innanzitutto, leggere il file .csv o qualsiasi altro file associato in un frame di dati Pandas.

df = pd.read_csv("data.csv")

 

Per verificare i valori unici e comprendere meglio i nostri dati, possiamo utilizzare le seguenti funzioni di Pandas.

df['categorical_column'].nunique()
df['categorical_column'].unique()

 

Per questi dati di esempio, le funzioni restituiscono il seguente output:

>>> 4
>>> array(['valore_A', 'valore_C', 'valore_D', 'valore_B'], dtype=object)

 

Per la colonna categorica, possiamo scomporla in più colonne. Per fare ciò, utilizziamo il metodo pandas.get_dummies(). Prende i seguenti argomenti:

Argomento
data: array-like, Series o DataFrame L’oggetto originale del dataframe di panda
columns: list-like, default None Elenco delle colonne categoriche da codificare
drop_first: bool, default False Rimuove il primo livello delle etichette categoriche

 

Per comprendere meglio la funzione, lavoriamo sulla codifica one-hot dell’insieme di dati dummy.

 

Codifica One-Hot delle Colonne Categoriche

 

Utilizziamo il metodo get_dummies e passiamo il dataframe originale come input data. In columns, passiamo una lista contenente solo l’intestazione categorical_column. 

df_encoded = pd.get_dummies(df, columns=['categorical_column', ])

 

I seguenti comandi eliminano la categorical_column e creano una nuova colonna per ogni valore univoco. Pertanto, la singola colonna categorica viene convertita in 4 nuove colonne in cui solo una delle 4 colonne avrà un valore 1, mentre tutte le altre 3 sono codificate come 0. Questo è il motivo per cui viene chiamata codifica One-Hot.

categorical_column_valore_A categorical_column_valore_B categorical_column_valore_C categorical_column_valore_D
1 0 0 0
0 1 0 0
0 0 0 1
0 0 0 1
0 0 0 1
0 0 0 1
0 1 0 0
0 0 0 1
0 0 1 0
0 0 0 1

 

Il problema si verifica quando vogliamo codificare in one-hot la colonna booleana. Vengono create anche due nuove colonne.

 

Codifica Hot di Colonne Binarie

 

df_encoded = pd.get_dummies(df, columns=[bool_col, ])

 

bool_col_False bool_col_True
0 1
1 0
0 1
1 0

 

Aumentiamo inutilmente una colonna quando possiamo avere solo una colonna in cui True è codificato come 1 e False è codificato come 0. Per risolvere questo problema, utilizziamo l’argomento drop_first.

df_encoded = pd.get_dummies(df, columns=['bool_col'], drop_first=True)

 

bool_col_True
1
0
1
0

 

Conclusione

 

Il dataset dummy è codificato in one-hot dove il risultato finale appare come segue

col_1 col_2 bool A B C D label
9 4 1 1 0 0 0 0
7 2 0 0 1 0 0 0
9 5 1 0 0 0 1 0
8 3 0 0 0 0 1 1
9 0 0 0 0 0 1 1
5 4 0 0 0 0 1 1
8 1 1 0 1 0 0 1
6 6 1 0 0 0 1 1
0 5 1 0 0 1 0 0
1 8 1 0 0 0 1 0

 

I valori categorici e i valori booleani sono stati convertiti in valori numerici che possono essere utilizzati come input per gli algoritmi di apprendimento automatico. Muhammad Arham è un ingegnere di Deep Learning che lavora in Visione Artificiale e Elaborazione del Linguaggio Naturale. Ha lavorato sulla distribuzione e ottimizzazione di diverse applicazioni di intelligenza artificiale generativa che hanno raggiunto le classifiche globali presso Vyro.AI. È interessato alla creazione e ottimizzazione di modelli di apprendimento automatico per sistemi intelligenti e crede nel miglioramento continuo.