One-Hot Encoder
Quando si tratta di valori nominali, la loro gestione risulta leggermente più complessa.
Per 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 ciascun valore unico. Poi, per ogni riga, assegna 1 alla colonna corrispondente al valore di quella riga e 0 alle altre colonne.
Quello che originariamente era 'NewYork' ora ha 1 nella colonna 'City_NewYork' e 0 nelle altre colonne City_.
Applicare OneHotEncoder al dataset penguins. Le caratteristiche nominali sono 'island' e 'sex'. La colonna 'species' rappresenta il target e verrà trattata separatamente nella prossima lezione dedicata al target encoding.
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
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 leggermente più complessa.
Per 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 ciascun valore unico. Poi, per ogni riga, assegna 1 alla colonna corrispondente al valore di quella riga e 0 alle altre colonne.
Quello che originariamente era 'NewYork' ora ha 1 nella colonna 'City_NewYork' e 0 nelle altre colonne City_.
Applicare OneHotEncoder al dataset penguins. Le caratteristiche nominali sono 'island' e 'sex'. La colonna 'species' rappresenta il target e verrà trattata separatamente nella prossima lezione dedicata al target encoding.
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!