¿Cómo lidiar con las etiquetas de cadena en la clasificación de varias clases con keras?

18

Soy novato en aprendizaje automático y keras y ahora estoy trabajando en un problema de clasificación de imágenes de varias clases usando keras. La entrada es imagen etiquetada. Después de un procesamiento previo, los datos de entrenamiento se representan en la lista de Python como:

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

el "perro", el "gato" y el "pájaro" son las etiquetas de clase. Creo que la codificación de un solo uso debería usarse para este problema, pero no tengo muy claro cómo tratarlo con estas etiquetas de cadena. He probado sklearn's LabelEncoder () de esta manera:

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

Y la salida es [2 1 0], que es diferente a mi salida esperada de algo como [[1,0,0], [0,1,0], [0,0,1]]. Se puede hacer con algo de codificación, pero me gustaría saber si hay alguna forma "estándar" o "tradicional" de manejarlo.

Dracarys
fuente

Respuestas:

14

El LabelEncodermódulo de Sklearn encuentra todas las clases y asigna a cada una una identificación numérica a partir de 0. Esto significa que cualesquiera que sean sus representaciones de clase en el conjunto de datos original, ahora tiene una forma simple y consistente de representar cada una. No realiza una codificación de hot-one, aunque, como identifica correctamente, está bastante cerca, y puede usar esos identificadores para generar rápidamente codificaciones de hot-one en otro código.

Si desea una codificación única, puede usarla LabelBinarizeren su lugar. Esto funciona de manera muy similar:

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

Salida:

[[0 0 1]
 [0 1 0]
 [1 0 0]]
Neil Slater
fuente
Pero, ¿cómo podría ayudarlo la codificación en caliente cuando intente predecir un nuevo color? Quizás en tu caso tengas que volver a entrenar al modelo. Tienes alguna solución ?
gtzinos
@gtzinos: Esa parece una pregunta diferente. Quizás pregunte en el sitio. Si lo hace, deje en claro si le preocupa que NN prediga un artículo nuevo (que no se ve en los datos de entrenamiento, pero lógicamente debería suceder en las nuevas entradas) o que agrega nuevas clases sobre la marcha cuando se encuentran en los datos de entrenamiento en línea.
Neil Slater