Cos’è una codifica a caldo e come farlo
Se ti piace l’apprendimento automatico, ti imbatterai inevitabilmente in questa cosa chiamata “One Hot Encoding”. Tuttavia, è una di quelle cose che sono difficili da afferrare come principiante all’apprendimento automatico, dal momento che è necessario conoscere alcune cose sull’apprendimento automatico per capirlo. Per aiutare, ho pensato di tentare di fornire una spiegazione per principianti.
La prima cosa da fare quando si sta facendo qualsiasi tipo di programma di apprendimento automatico è di solito pre-elaborazione. Con questo, intendo preparare i dati da analizzare dal tuo programma. Dopo tutto, non puoi semplicemente lanciare un foglio di calcolo o alcune immagini nel tuo programma e aspettarti che sappia cosa fare. Non siamo ancora a quel livello di intelligenza artificiale.
Una grande parte della pre-elaborazione è qualcosa di codifica. Ciò significa rappresentare ogni pezzo di dati in un modo che il computer può capire, da qui il nome encode, che letteralmente significa “convertire in codice”. Esistono molti modi diversi di codifica come la codifica delle etichette o, come si potrebbe immaginare, una codifica a caldo. La codifica delle etichette è intuitiva e facile da capire, quindi lo spiegherò prima. Speriamo che da lì sarete in grado di comprendere appieno una codifica a caldo.
Supponiamo di lavorare con dati categorici, come cani e gatti. Guardando il nome della codifica dell’etichetta, potresti essere in grado di indovinare che codifica le etichette, dove l’etichetta è solo una categoria (cioè gatto o cane), e codificare significa solo dare loro un numero per rappresentare quella categoria (1 per gatto e 2 per cane). Dando a ciascuna categoria un numero, il computer ora sa come rappresentarli, poiché il computer sa come lavorare con i numeri. E ora abbiamo già finito di spiegare la codifica delle etichette. Ma c’è un problema che lo rende spesso non funziona per i dati categorici.
Il problema è che con la codifica delle etichette, le categorie ora hanno relazioni ordinate naturali. Il computer fa questo perché è programmato per trattare numeri più alti come numeri più alti; darà naturalmente ai numeri più alti pesi più alti. Possiamo vedere il problema con questo in un esempio:
- Immagina se avessi 3 categorie di alimenti: mele, pollo e broccoli. Usando la codifica dell’etichetta, assegneresti a ciascuno di questi un numero per classificarli: mele = 1, pollo = 2 e broccoli = 3. Ma ora, se il tuo modello internamente ha bisogno di calcolare la media tra le categorie, potrebbe fare 1 + 3 = 4/2 = 2. Ciò significa che secondo il tuo modello, la media di mele e pollo insieme è broccoli.
Ovviamente quella linea di pensiero del tuo modello porterà ad ottenere correlazioni completamente sbagliate, quindi dobbiamo introdurre una codifica a caldo.
Piuttosto che etichettare le cose come un numero a partire da 1 e quindi aumentare per ogni categoria, andremo per più di uno stile binario di categorizzazione. Potresti aver pensato che se sapessi cos’è un one-hot (si riferisce alla codifica binaria, ma non preoccuparti). Permettetemi di fornire una differenza visualizzata tra etichetta e codifica one-hot. Vedi se riesci a capire la differenza:
Qual è la differenza? Bene, le nostre categorie erano precedentemente righe, ma ora sono colonne. La nostra variabile numerica, calorie, è comunque rimasta la stessa. Un 1 in una particolare colonna dirà al computer la categoria corretta per i dati di quella riga. In altre parole, abbiamo creato una colonna binaria aggiuntiva per ogni categoria.
Non è immediatamente chiaro perché questo sia migliore (a parte il problema che ho menzionato prima), e questo perché non c’è una ragione chiara. Come molte cose nell’apprendimento automatico, non lo useremo in ogni situazione; non è assolutamente migliore della codifica delle etichette. Risolve solo un problema che incontrerai con la codifica delle etichette quando lavori con dati categorici
Una codifica a caldo nel codice (Capito? È un gioco di parole)
È sempre utile vedere come questo viene fatto nel codice, quindi facciamo un esempio. Normalmente sono fermamente convinto che dovremmo fare qualcosa senza librerie per impararlo, ma solo per questa noiosa roba di pre-elaborazione non ne abbiamo davvero bisogno. Le librerie possono rendere questo così semplice. Useremo numpy, sklearn e panda, poiché ti ritroverai a utilizzare quelle 3 librerie in molti dei tuoi progetti
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np
import pandas as pd
Ora che abbiamo gli strumenti, iniziamo. Lavoreremo con un set di dati composto. Inserisci il set di dati con i panda .funzione read_csv:
dataset = pd.read_csv('made_up_thing.csv')
Speriamo che sia auto-esplicativo. Il prossimo è un po ‘ più complicato. La cosa su fogli di calcolo è che si può o non può preoccuparsi di alcune delle colonne. Per semplicità, diciamo che ci preoccupiamo di tutto tranne l’ultima colonna. Useremo la funzione panda .iloc, che ottiene i dati in qualsiasi colonna(s) a cui lo dici:
X = dataset.iloc.values
.iloc prende in realtà, così abbiamo inserito . Il : è perché vogliamo tutte le righe in quelle colonne, e : è solo il modo in cui lo fai. Aggiungiamo il .valori per, bene, ottenere i valori in quali segmenti abbiamo selezionato. In altre parole, la prima parte seleziona i valori, la seconda parte ottiene i valori.
Ora facciamo la codifica effettiva. Sklearn rende incredibilmente facile, ma c’è un problema. Avrai notato che abbiamo importato sia labelencoder che one hot encoder. Un encoder caldo di Sklearn in realtà non sa come convertire le categorie in numeri, sa solo come convertire i numeri in binari. Prima dobbiamo usare labelencoder.
Per prima cosa, configureremo un labelencoder proprio come faresti con qualsiasi oggetto normale:
le = LabelEncoder()
Poi dobbiamo usare sklearn .funzione fit_transform. Diciamo che abbiamo bisogno di codificare solo la prima colonna. Lo faremmo:
X = le.fit_transform(X)
Questa funzione è solo una combinazione di .in forma e .trasforma comandi. .fit prende X (in questo caso la prima colonna di X a causa della nostra X) e converte tutto in dati numerici. .transform applica quindi tale conversione.
Tutto ciò che rimane è usare l’encoder one hot. Per fortuna, è quasi lo stesso di quello che abbiamo appena fatto:
ohe = OneHotEncoder(categorical_features = )
X = ohe.fit_transform(X).toarray()
Categorical_feartures è un parametro che specifica quale colonna vogliamo codificare a caldo, e dal momento che vogliamo codificare la prima colonna, abbiamo messo . Infine, fit_transform in binario e lo trasformiamo in un array in modo da poter lavorare con esso facilmente andando avanti.
E il gioco è fatto! E ‘ piuttosto semplice. Un’ultima nota però, se hai bisogno di fare più della prima colonna, fai quello che abbiamo appena fatto, ma invece di 0 metti qualsiasi colonna tu voglia. Per molte colonne, puoi metterlo in un ciclo for:
le = LabelEncoder()#for 10 columns
for i in range(10):
X = le.fit_transform(X)
Buona fortuna per te avventure di apprendimento automatico!