Comment gérer les étiquettes de chaînes dans une classification multi-classes avec des keras?

18

Je suis novice en apprentissage automatique et en kéros et je travaille actuellement sur un problème de classification d'images multi-classes en utilisant des kéros. L'entrée est l'image balisée. Après un certain prétraitement, les données d'entraînement sont représentées dans la liste Python comme:

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

«chien», «chat» et «oiseau» sont les étiquettes de classe. Je pense que l'encodage à chaud devrait être utilisé pour ce problème, mais je ne suis pas très clair sur la façon de le traiter avec ces étiquettes de chaîne. J'ai essayé LabelEncoder () de sklearn de cette manière:

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

Et la sortie est [2 1 0], ce qui est différent de ma sortie attendue de quelque chose comme [[1,0,0], [0,1,0], [0,0,1]]. Cela peut être fait avec du codage, mais j'aimerais savoir s'il existe une manière "standard" ou "traditionnelle" de le gérer?

Dracarys
la source

Réponses:

14

Le LabelEncodermodule de Sklearn recherche toutes les classes et attribue à chacune un identifiant numérique à partir de 0. Cela signifie que quelles que soient vos représentations de classe dans l'ensemble de données d'origine, vous disposez désormais d'un moyen simple et cohérent de les représenter. Il ne fait pas d'encodage à chaud, bien que comme vous l'identifiez correctement, il soit assez proche, et vous pouvez utiliser ces identifiants pour générer rapidement des encodages à chaud dans un autre code.

Si vous voulez un encodage à chaud, vous pouvez utiliser à la LabelBinarizerplace. Cela fonctionne de manière très similaire:

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

Production:

[[0 0 1]
 [0 1 0]
 [1 0 0]]
Neil Slater
la source
Mais comment le codage à chaud pourrait-il vous aider lorsque vous tenterez de prédire une nouvelle couleur? Dans votre cas, vous devrez peut-être recycler le modèle. Avez-vous une solution?
gtzinos
@gtzinos: Cela ressemble à une question différente. Peut-être le demander sur le site. Si vous le faites, indiquez clairement si vous êtes préoccupé par NN prédire un nouvel article (non visible dans les données de formation, mais devrait logiquement se produire sur de nouvelles entrées), ou ajouter de nouvelles classes à la volée lorsqu'elles sont rencontrées dans les données de formation en ligne.
Neil Slater