Come eseguire la codifica One-Hot per variabili multi categoriale

Nodo di origine: 841101

In questo articolo, impareremo come possiamo gestire variabili multicategoriche utilizzando la tecnica di Feature Engineering One Hot Encoding.

Ma prima di andare avanti, facciamo una breve discussione su Feature engineering e One Hot Encoding.

Feature Engineering

Quindi, Feature Engineering è il processo di estrazione di funzionalità da dati grezzi utilizzando la conoscenza del dominio del problema. Queste funzionalità possono essere utilizzate per migliorare le prestazioni degli algoritmi di apprendimento automatico e, se le prestazioni aumentano, forniranno la massima precisione. Possiamo anche dire che l'ingegneria delle funzionalità è la stessa dell'apprendimento automatico applicato. L'ingegneria delle funzionalità è l'arte più importante nell'apprendimento automatico che crea un'enorme differenza tra un buon modello e un cattivo modello. Questo è il terzo passaggio nel ciclo di vita di qualsiasi progetto di data science.

Il concetto di trasparenza per i modelli di apprendimento automatico è una cosa complicata poiché modelli diversi spesso richiedono approcci diversi per i diversi tipi di dati. Ad esempio:-

  • Dati continui
  • Caratteristiche categoriali
  • Valori mancanti
  • Normalizzazione
  • Date e ora

Ma qui discuteremo solo delle caratteristiche categoriche, le caratteristiche categoriche sono quelle caratteristiche in cui il tipo di dati è un tipo di oggetto. Il valore del punto dati in qualsiasi caratteristica categorica non è in forma numerica, piuttosto era in forma di oggetto.

Esistono molte tecniche per gestire le variabili categoriali, alcune sono:

  • Codifica etichetta o codifica ordinale
  • Una codifica calda
  • Codifica fittizia
  • Codifica effetto
  • Codifica binaria
  • Codifica di Basilea
  • Codifica hash
  • Codifica destinazione

Quindi, qui gestiamo le caratteristiche categoriche di One Hot Encoding, quindi prima di tutto discuteremo di One Hot Encoding.

Una codifica a caldo

Sappiamo che le variabili categoriali contengono i valori delle etichette piuttosto che i valori numerici. Il numero di valori possibili è spesso limitato a un insieme fisso. Le variabili categoriali sono spesso chiamate nominali. Molti algoritmi di apprendimento automatico non possono operare direttamente sui dati delle etichette. Richiedono che tutte le variabili di input e le variabili di output siano numeriche.

Ciò significa che i dati categorici devono essere convertiti in una forma numerica. Se la variabile categoriale è una variabile di output, potresti anche voler riconvertire le previsioni del modello in una forma categoriale per presentarle o utilizzarle in qualche applicazione.

per esempio i dati sul genere sono in forma di 'maschio' ed 'femmina'.

Ma se utilizziamo la codifica one-hot, codificare e consentire al modello di assumere un ordinamento naturale tra le categorie può comportare prestazioni scadenti o risultati imprevisti.

La codifica one-hot può essere applicata alla rappresentazione intera. Qui è dove la variabile codificata intera viene rimossa e viene aggiunta una nuova variabile binaria per ogni valore intero univoco.

Ad esempio, codifichiamo la variabile dei colori,

Colore rosso  Colore blu
0 1
1 0
0 1

Ora inizieremo il nostro viaggio. Nella prima fase, prendiamo un set di dati di previsione dei prezzi delle case.

dataset

Qui useremo il set di dati house_price che viene utilizzato per prevedere il prezzo della casa in base alle dimensioni dell'area.

Se desideri scaricare il set di dati di previsione dei prezzi delle case, fai clic su qui.

Importazione di moduli

Ora, dobbiamo importare moduli importanti da Python che useremo per la codifica one-hot

# importazione di panda import panda come pd # importazione di numpy import numpy come np # importazione di OneHotEncoder da sklearn.preprocessing import OneHotEncoder()

Qui utilizziamo i panda che vengono utilizzati per l'analisi dei dati, NumPyused per gli array n-dimensionali e da sklearn utilizzeremo un'importante classe One Hot Encoder per la codifica categorica.

Ora dobbiamo leggere questi dati usando Python.

Lettura del set di dati

Generalmente, il set di dati è in formato CSV e anche il set di dati che utilizziamo è in formato CSV. Per leggere il file CSV useremo la funzione pandas read_csv(). vedi sotto:

# lettura dataset df = pd.read_csv('house_price.csv') df.head()

produzione:-

Ma dobbiamo usare solo variabili categoriali per un codificatore caldo e cercheremo di spiegare solo con variabili categoriali per una facile comprensione.

per partizionare le variabili categoriali dai dati dobbiamo verificare quante caratteristiche hanno valori categoriali.

Controllo dei valori categorici

Per controllare i valori utilizziamo la funzione pandas select_dtypes che viene utilizzata per selezionare i tipi di dati della variabile.

# caratteristiche di controllo cat = df.select_dtypes(include='O').keys() # visualizza variabili cat

produzione:-

 

Ora dobbiamo eliminare quelle colonne numeriche dal set di dati e useremo questa variabile categoriale per il nostro uso. Utilizziamo solo 3-4 colonne categoriche dal set di dati per l'applicazione della codifica one-hot.

Creazione di un nuovo dataframe

Ora, per utilizzare le variabili categoriali, creeremo un nuovo dataframe di colonne categoriali selezionate.

# creazione di nuove colonne df # impostazione usiamo new_df = pd.read_csv('house_price.csv',usecols=['Quartiere','Esterno1°','Esterno2°']) new_df.head()

produzione:-

Ora dobbiamo scoprire quante categorie univoche sono presenti in ogni colonna categorica.

Trovare valori unici

Per trovare valori univoci useremo la funzione pandas unique().

# valori univoci in ogni colonna per x in new_df.columns: #stampa valori univoci print(x ,':', len(new_df[x].unique()))

produzione:-

Quartiere : 25
Esterno1° : 15
Esterno2° : 16

Ora, utilizzeremo la nostra tecnica per applicare la codifica one-hot su variabili multicategoriche.

Tecnica per variabili multicategoriche

La tecnica consiste nel limitare la codifica one-hot alle 10 etichette più frequenti della variabile. Ciò significa che creeremmo una variabile binaria solo per ciascuna delle 10 etichette più frequenti, ciò equivale a raggruppare tutte le altre etichette in una nuova categoria, che in questo caso verrà eliminata. Pertanto, le 10 nuove variabili fittizie indicano se è presente una delle 10 etichette più frequenti 1 oppure no allora 0 per una particolare osservazione.

Variabili più frequenti

Qui selezioneremo le 20 variabili più frequenti.

Supponiamo di prendere una variabile categoriale quartiere.

# trovare le prime 20 categorie new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

produzione:

Quando vedi in questa immagine di output noterai che il file NOMI l'etichetta si ripete 225 volte nelle colonne Quartiere e scendiamo questo numero sta diminuendo.

Quindi abbiamo preso i primi 10 risultati dall'alto e abbiamo convertito questi primi 10 risultati in una codifica one-hot e le etichette di sinistra si trasformano in zero.

produzione:-

 

Elenco delle variabili categoriche più frequenti

# crea una lista con le prime 10 variabili top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

produzione:-

['NOMI',
'CollgCr',
'Città vecchia',
'Edoardo',
'Somerst',
'Gilbert',
'Nridght',
'Sawyer',
'NWAmes',
'SawyerW']

Ci sono le prime 10 etichette categoriali nella colonna Quartiere.

Rendi binario

Ora, dobbiamo creare le 10 variabili binarie delle etichette top_10:

# crea il binario delle etichette

per etichetta in top_10:

nuovo_df = np.where(new_df['Quartiere']==etichetta,1,0)

new_df[['Quartiere']+top_10]


produzione:-

NOMI CollegCr Città vecchia Edwards Somerset Gilbert NridgHT Segatore NWAmes Sawyer W
0 CollegCr 0 1 0 0 0 0 0 0 0 0
1 Venker 0 0 0 0 0 0 0 0 0 0
2 CollegCr 0 1 0 0 0 0 0 0 0 0
3 Crawfor 0 0 0 0 0 0 0 0 0 0
4 NoRidge 0 0 0 0 0 0 0 0 0 0
5 Mitchel 0 0 0 0 0 0 0 0 0 0
6 Somerset 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Città vecchia 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 Segatore 0 0 0 0 0 0 0 1 0 0
11 NridgHT 0 0 0 0 0 0 1 0 0 0

Puoi vedere come le etichette top_10 sono ora convertite in formato binario.

Facciamo un esempio, vedi nella tabella dove 1 Index Venker che non apparteneva alla nostra etichetta di categorie top_10 quindi risulterà in 0 tutte le colonne.

Ora lo faremo per tutte le variabili categoriali che abbiamo selezionato sopra.

Tutte le variabili selezionate su OneHotEncoding

# per tutte le variabili categoriche abbiamo selezionato def top_x(df2,variable,top_x_labels): for label in top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # read i dati di nuovo data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Quartiere nelle 10 categorie più frequenti top_x(data, 'Quartiere',top_10) # mostra i dati data.head()

Produzione:-

Ora, qui applichiamo la codifica one-hot su tutte le variabili multicategoriche.

Ora vedremo i vantaggi e gli svantaggi di One Hot Encoding per più variabili.

Vantaggi

  • Semplice da implementare
  • Non richiede molto tempo per l'esplorazione variabile
  • Non espande in modo massiccio lo spazio delle funzionalità.

Svantaggi

  • Non aggiunge alcuna informazione che possa rendere la variabile più predittiva
  • Non conservare le informazioni delle variabili ignorate.

Note finali

Quindi, il riassunto di questo è che impariamo come gestire variabili multicategoriche, se ti imbatti in questo problema, allora questo è un compito molto difficile. Quindi grazie per aver letto questo articolo.

Connettiti con me su Linkedin: Profilo

Leggi i miei altri articoli: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Grazie😎

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e vengono utilizzati a discrezione dell'autore.

Puoi anche leggere questo articolo sulla nostra APP mobile Get it on Google Play

Articoli Correlati

Fonte: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

Timestamp:

Di più da Analisi Vidhya