One-Hot Encoder
Quando si tratta di valori nominali, la loro gestione risulta un po' più complessa.
Per i dati ordinali, come le valutazioni degli utenti che vanno da 'Terribile' a 'Ottimo', codificarli come numeri da 0 a 4 è appropriato perché il modello può cogliere l'ordine intrinseco.
Al contrario, per una caratteristica come 'city'
con cinque categorie distinte, codificarle come numeri da 0 a 4 suggerirebbe erroneamente un ordine. In questo caso, la one-hot encoding è una scelta migliore, poiché rappresenta le categorie senza implicare una gerarchia.
Per codificare i dati nominali, si utilizza il trasformatore OneHotEncoder
. Esso crea una colonna per ogni valore unico. Poi, per ogni riga, imposta 1 nella colonna corrispondente al valore di quella riga e 0 nelle altre colonne.
Quello che originariamente era 'NewYork'
ora ha 1 nella colonna 'City_NewYork'
e 0 nelle altre colonne City_
.
Applica OneHotEncoder
al dataset penguins. Le caratteristiche nominali sono 'island'
e 'sex'
. La colonna 'species'
è il target e verrà trattata separatamente quando si discuterà della codifica del target nel prossimo capitolo.
123456import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') print('island: ', df['island'].unique()) print('sex: ', df['sex'].unique())
Per applicare OneHotEncoder
, inizializzare l'oggetto encoder e passare le colonne selezionate a .fit_transform()
, nello stesso modo degli altri trasformatori.
1234567891011import pandas as pd from sklearn.preprocessing import OneHotEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') # Assign X, y variables y = df['species'] X = df.drop('species', axis=1) # Initialize an OneHotEncoder object one_hot = OneHotEncoder() # Print transformed 'sex', 'island' columns print(one_hot.fit_transform(X[['sex', 'island']]).toarray())
Il metodo .toarray()
converte la matrice sparsa restituita da OneHotEncoder
in un array NumPy denso. Gli array densi mostrano esplicitamente tutti i valori, facilitando la visualizzazione e la manipolazione dei dati codificati all'interno di un DataFrame. Le matrici sparse memorizzano solo gli elementi diversi da zero, ottimizzando l'uso della memoria. È possibile omettere questo metodo per vedere la differenza nell'output.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Can you explain how OneHotEncoder works in more detail?
What are the unique values in the 'island' and 'sex' columns?
How do I interpret the output of the OneHotEncoder?
Awesome!
Completion rate improved to 3.13
One-Hot Encoder
Scorri per mostrare il menu
Quando si tratta di valori nominali, la loro gestione risulta un po' più complessa.
Per i dati ordinali, come le valutazioni degli utenti che vanno da 'Terribile' a 'Ottimo', codificarli come numeri da 0 a 4 è appropriato perché il modello può cogliere l'ordine intrinseco.
Al contrario, per una caratteristica come 'city'
con cinque categorie distinte, codificarle come numeri da 0 a 4 suggerirebbe erroneamente un ordine. In questo caso, la one-hot encoding è una scelta migliore, poiché rappresenta le categorie senza implicare una gerarchia.
Per codificare i dati nominali, si utilizza il trasformatore OneHotEncoder
. Esso crea una colonna per ogni valore unico. Poi, per ogni riga, imposta 1 nella colonna corrispondente al valore di quella riga e 0 nelle altre colonne.
Quello che originariamente era 'NewYork'
ora ha 1 nella colonna 'City_NewYork'
e 0 nelle altre colonne City_
.
Applica OneHotEncoder
al dataset penguins. Le caratteristiche nominali sono 'island'
e 'sex'
. La colonna 'species'
è il target e verrà trattata separatamente quando si discuterà della codifica del target nel prossimo capitolo.
123456import pandas as pd df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') print('island: ', df['island'].unique()) print('sex: ', df['sex'].unique())
Per applicare OneHotEncoder
, inizializzare l'oggetto encoder e passare le colonne selezionate a .fit_transform()
, nello stesso modo degli altri trasformatori.
1234567891011import pandas as pd from sklearn.preprocessing import OneHotEncoder df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_imputed.csv') # Assign X, y variables y = df['species'] X = df.drop('species', axis=1) # Initialize an OneHotEncoder object one_hot = OneHotEncoder() # Print transformed 'sex', 'island' columns print(one_hot.fit_transform(X[['sex', 'island']]).toarray())
Il metodo .toarray()
converte la matrice sparsa restituita da OneHotEncoder
in un array NumPy denso. Gli array densi mostrano esplicitamente tutti i valori, facilitando la visualizzazione e la manipolazione dei dati codificati all'interno di un DataFrame. Le matrici sparse memorizzano solo gli elementi diversi da zero, ottimizzando l'uso della memoria. È possibile omettere questo metodo per vedere la differenza nell'output.
Grazie per i tuoi commenti!