logo

Una codifica a caldo nel machine learning

La maggior parte dei set di dati reali che incontriamo durante lo sviluppo del nostro progetto di data science hanno colonne di tipo di dati misto. Questi set di dati sono costituiti da entrambi categorico nonché colonne numeriche. Tuttavia, vari modelli di machine learning non funzionano con dati categorici e per adattarli al modello di machine learning è necessario convertirli in dati numerici. Ad esempio, supponiamo che un set di dati abbia un file Genere colonna con elementi categorici come Maschio e Femmina . Queste etichette non hanno un ordine di preferenza specifico e inoltre, poiché i dati sono etichette di stringa, i modelli di apprendimento automatico hanno interpretato erroneamente che vi sia una sorta di gerarchia al loro interno.

Un approccio per risolvere questo problema può essere la codifica delle etichette in cui, ad esempio, assegneremo un valore numerico a queste etichette Maschio E Femmina mappato su 0 E 1 . Ma questo può aggiungere distorsioni al nostro modello poiché inizierà a dare una preferenza maggiore a Femmina parametro come 1>0 ma idealmente entrambe le etichette sono ugualmente importanti nel set di dati. Per affrontare questo problema utilizzeremo la tecnica One Hot Encoding.

Una codifica a caldo

Una codifica a caldo è una tecnica che utilizziamo per rappresentare le variabili categoriali come valori numerici in un modello di apprendimento automatico.



I vantaggi derivanti dall'utilizzo di una codifica a caldo includono:

  1. Consente l'uso di variabili categoriali nei modelli che richiedono input numerici.
  2. Può migliorare le prestazioni del modello fornendo maggiori informazioni al modello sulla variabile categoriale.
  3. Può aiutare a evitare il problema dell'ordinalità, che può verificarsi quando una variabile categoriale ha un ordinamento naturale (ad esempio piccolo, medio, grande).

Gli svantaggi dell'utilizzo di una codifica a caldo includono:

  1. Può portare a una maggiore dimensionalità, poiché viene creata una colonna separata per ciascuna categoria nella variabile. Ciò può rendere il modello più complesso e lento da addestrare.
  2. Può portare a dati sparsi, poiché la maggior parte delle osservazioni avrà un valore pari a 0 nella maggior parte delle colonne codificate a caldo.
  3. Ciò può portare a un overfitting, soprattutto se nella variabile sono presenti molte categorie e la dimensione del campione è relativamente piccola.
  4. La codifica one-hot è una tecnica potente per trattare dati categorici, ma può portare a una maggiore dimensionalità, scarsità e adattamento eccessivo. È importante usarlo con cautela e considerare altri metodi come la codifica ordinale o la codifica binaria.

Un esempio di codifica a caldo

In Una codifica a caldo , i parametri categoriali prepareranno colonne separate per le etichette sia maschile che femminile. Quindi, ovunque sia presente un Maschio, il valore sarà 1 nella colonna Maschio e 0 nella colonna Femmina, e viceversa. Capiamo con un esempio: consideriamo i dati in cui vengono forniti i frutti, i valori categoriali corrispondenti e i prezzi.

FruttaValore categorico del fruttoPrezzo
mela15
Mango210
mela1quindici
arancia3venti

L'output dopo aver applicato la codifica one-hot sui dati è dato come segue,

melaMangoaranciaprezzo
1005
01010
100quindici
001venti

Codifica One-Hot utilizzando Python

Creazione del dataframe

Creazione di un dataframe per implementare una codifica a caldo dal file CSV.

componenti del robot
Python3
# Program for demonstration of one hot encoding # import libraries import numpy as np import pandas as pd # import the data required data = pd.read_csv('employee_data.csv') print(data.head())>

Produzione:

Prime cinque righe di Dataframe

Prime cinque righe di Dataframe

Elementi univoci nella colonna categoriale

possiamo usare il unico() funzione da panda libreria per ottenere elementi univoci dalla colonna del dataframe.

Python3
print(data['Gender'].unique()) print(data['Remarks'].unique())>

Produzione:

array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>

Conteggio degli elementi nella colonna

Possiamo usare valore_conta() funzione dai panda per ottenere i conteggi di ciascun elemento nel dataframe.

Python3
data['Gender'].value_counts() data['Remarks'].value_counts()>

Produzione:

Female 7 Male 5 Name: Gender, dtype: int64  Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>

Abbiamo a disposizione due metodi per eseguire la codifica one-hot sulla colonna categoriale.

Codifica one-hot della colonna categoriale utilizzando la libreria Pandas

Possiamo usare pd.get_dummies() la funzione da panda a one-hot codifica le colonne categoriche. Questa funzione

Python3
one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>

Produzione:

Colonne codificate One-Hot del set di dati

Colonne codificate One-Hot del set di dati

Possiamo osservare che abbiamo 3 Osservazioni E 2 Genere colonne nei dati. Tuttavia, puoi semplicemente usare n-1 colonne per definire i parametri, se presenti N etichette uniche. Ad esempio, se manteniamo solo il file Genere femminile colonna e rilasciare il file Genere maschile colonna, allora possiamo anche trasmettere l'intera informazione come quando l'etichetta è 1, significa femmina e quando l'etichetta è 0 significa maschio. In questo modo possiamo codificare i dati categorici e ridurre anche il numero di parametri.

Una codifica a caldo utilizzando la libreria Sci-kit Learn

Scikit-learn(sklearn) è una popolare libreria di apprendimento automatico in Python che fornisce numerosi strumenti per la preelaborazione dei dati. Fornisce un OneHotEncoder funzione che utilizziamo per codificare variabili categoriali e numeriche in vettori binari.

Python3
#one hot encoding using OneHotEncoder of Scikit-Learn import pandas as pd from sklearn.preprocessing import OneHotEncoder #Building a dummy employee dataset for example data = {'Employee id': [10, 20, 15, 25, 30], 'Gender': ['M', 'F', 'F', 'M', 'F'], 'Remarks': ['Good', 'Nice', 'Good', 'Great', 'Nice'], } #Converting into a Pandas dataframe df = pd.DataFrame(data) #Print the dataframe: print(f'Employee data : 
{df}') #Extract categorical columns from the dataframe #Here we extract the columns with object datatype as they are the categorical columns categorical_columns = df.select_dtypes(include=['object']).columns.tolist() #Initialize OneHotEncoder encoder = OneHotEncoder(sparse_output=False) # Apply one-hot encoding to the categorical columns one_hot_encoded = encoder.fit_transform(df[categorical_columns]) #Create a DataFrame with the one-hot encoded columns #We use get_feature_names_out() to get the column names for the encoded data one_hot_df = pd.DataFrame(one_hot_encoded, columns=encoder.get_feature_names_out(categorical_columns)) # Concatenate the one-hot encoded dataframe with the original dataframe df_encoded = pd.concat([df, one_hot_df], axis=1) # Drop the original categorical columns df_encoded = df_encoded.drop(categorical_columns, axis=1) # Display the resulting dataframe print(f'Encoded Employee data : 
{df_encoded}')>

Produzione

Employee data :   Employee id Gender Remarks 0 10 M Good 1 20 F Nice 2 15 F Good 3 25 M Great 4 30 F Nice Encoded Employee data :   Employee id Gender_F Gender_M Remarks_Good Remarks_Great Remarks_Nice 0 10 0.0 1.0 1.0 0.0 0.0 1 20 1.0 0.0 0.0 0.0 1.0 2 15 1.0 0.0 1.0 0.0 0.0 3 25 0.0 1.0 0.0 1.0 0.0 4 30 1.0 0.0 0.0 0.0 1.0>