Come gestire le etichette di stringa nella classificazione multi-classe con keras?


18

Sono alle prime armi con l'apprendimento automatico e le macchine fotografiche e ora sto lavorando a un problema di classificazione delle immagini multi-classe usando le macchine fotografiche. L'input è immagine taggata. Dopo alcune preelaborazioni, i dati di allenamento sono rappresentati nell'elenco Python come:

[["dog", "path/to/dog/imageX.jpg"],["cat", "path/to/cat/imageX.jpg"], ["bird", "path/to/cat/imageX.jpg"]]

"cane", "gatto" e "uccello" sono le etichette di classe. Penso che la codifica one-hot debba essere utilizzata per questo problema, ma non sono molto chiaro su come gestirlo con queste etichette di stringa. Ho provato LabelEncoder () di sklearn in questo modo:

encoder = LabelEncoder()
trafomed_label = encoder.fit_transform(["dog", "cat", "bird"])
print(trafomed_label)

E l'output è [2 1 0], che è diverso dall'output delle mie aspettative di qualcosa come [[1,0,0], [0,1,0], [0,0,1]]. Può essere fatto con un po 'di codice, ma mi piacerebbe sapere se esiste un modo "standard" o "tradizionale" per gestirlo?

Risposte:


14

Il LabelEncodermodulo di Sklearn trova tutte le classi e assegna a ciascuna un ID numerico a partire da 0. Ciò significa che qualunque sia la rappresentazione delle tue classi nel set di dati originale, ora hai un modo semplice e coerente per rappresentarle. Non esegue la codifica one-hot, anche se, come identificato correttamente, è abbastanza vicino e puoi usare quegli ID per generare rapidamente codifiche one-hot in altri codici.

Se si desidera la codifica one-hot, è possibile utilizzare LabelBinarizerinvece. Funziona in modo molto simile:

 from sklearn.preprocessing import LabelBinarizer
 encoder = LabelBinarizer()
 transfomed_label = encoder.fit_transform(["dog", "cat", "bird"])
 print(transfomed_label)

Produzione:

[[0 0 1]
 [0 1 0]
 [1 0 0]]

Ma come può aiutarti la codifica a caldo quando proverai a prevedere un nuovo colore? Forse nel tuo caso devi riqualificare il modello. Hai qualche soluzione?
gtzinos,

@gtzinos: sembra una domanda diversa. Forse chiedilo sul sito. In tal caso, chiarisci se sei preoccupato della previsione di un nuovo articolo da parte di NN (non visibile nei dati di allenamento, ma logicamente dovrebbe verificarsi su nuovi input) o dell'aggiunta al volo di nuove classi quando vengono rilevati nei dati di allenamento online.
Neil Slater,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.