Error de MultilabelBinarizer cuando está presente una clase vacía.
Estoy construyendo un clasificador multietiqueta, cuando trato de llamar al informe de clasificación, obtengo el siguiente error: ValueError: Todos las etiquetas deben estar en [0, número de etiquetas) para objetivos de múltiples etiquetas. Se obtuvo 6 > 2
. A continuación, se muestra un ejemplo mínimo que produce el error:
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.metrics import classification_report
import pandas as pd
a = [
[3, 4],
[6],
[3],
[],
[6, 4]
]
bin = MultiLabelBinarizer()
bin.fit(a)
a = bin.transform(a)
report = classification_report(
a,
a,
output_dict=True,
zero_division=0,
labels=bin.classes_
)
print(report)
Cuando intento convertir las clases a cadenas, obtengo el siguiente error:
. Si comento
TypeError: '>=' no es compatible entre instancias de 'str' y 'int'labels=bin.classes_
, todo funciona, pero me gustaría tener las clases originales en el informe. ¿Cómo puedo resolverlo? ¿Es un error?
davy.ai
El error ocurre porque
bin.classes_
devuelve un arreglo de cadenas de texto, mientras que el informe de clasificación espera un arreglo de enteros. Una forma de resolver esto es crear un mapeo entre las etiquetas de clase originales y sus valores enteros correspondientes. Aquí tienes un fragmento de código actualizado que resuelve el problema:En este código, creamos un diccionario
label_map
que mapea las etiquetas de texto a sus valores enteros correspondientes. Luego, utilizamos este mapeo para convertirbin.classes_
a un arreglo de enteros, que pasamos como parámetrolabels
a la funciónclassification_report
. Esto debería mostrar el informe de clasificación con las etiquetas de clase originales.