IndexError: el índice 55 está fuera de los límites para el eje 0 con tamaño 55 en el artículo de clasificación de texto multimodal hacia la ciencia de datos.
Estoy tratando de poner en práctica el código sobre el texto de tarea múltiple con clasificación de scikit-learn
presentado por Susan Li en https://github.com/susanli2016/Machine-Learning-with-Python/blob/master/Consumer_complaints.ipynb.
Incluso en el repositorio de Github proporcionado, se produce un Index error
, que no he podido resolver. En su caso, el error no ocurre inmediatamente (lo cual es mi caso), sino después del cuarto caso y otros usuarios parecen tener el mismo problema.
Sé que esto podría venir del hecho de que el índice del array numpy
comienza en 0, lo que haría que el valor máximo del índice sea solo 54…
Por cierto, en mi caso, category_id_df.category_id
y id_to_category
tienen 59 valores diferentes, todos presentes en la matriz de confusión. Pero creo que la partición de prueba incluye 4 nuevas clases que no están presentes en el conjunto de entrenamiento (actual
) y que aparecen en blanco en los valores de conf_mat
. Esto compensaría el error anunciado de 55. ¿Cómo podría superar esto de manera programática?
232 para predicted in category_id_df.category_id:
233 para actual in category_id_df.category_id:
--> 234 if predicted != actual and conf_mat[actual, predicted] >= 7:
235 print("'{}' predicho como '{}': {} ejemplos.".format(id_to_category[actual], id_to_category[predicted], conf_mat[actual, predicted]))
236 display(df.loc[indices_test[(target_test == actual) & (y_pred == predicted)]] [['class1', 'doc_text']])
IndexError: el índice 55 está fuera de los límites para el eje 0 con tamaño 55
Gracias.
davy.ai
Parece que el
IndexError
es causado por tratar de acceder a un índice que no existe en la matrizconf_mat
. Una posible solución sería comprobar el valor máximo decategory_id_df.category_id
y asegurarse de que las dimensiones de la matrizconf_mat
sean apropiadas.En cuanto al problema con las nuevas clases en el conjunto de pruebas, una posible solución podría ser agregar filas y columnas adicionales a la matriz
conf_mat
para esas clases faltantes e inicializarlas con ceros. Esto se puede hacer comprobando si la clase está presente en el conjunto de pruebas pero no en el conjunto de entrenamiento, y añadiendo una nueva fila y columna aconf_mat
para esa clase.Otra opción podría ser modificar el código para ignorar esas clases faltantes durante la evaluación y solo considerar las clases que están presentes tanto en el conjunto de entrenamiento como en el conjunto de pruebas. Esto se puede hacer filtrando las filas y columnas de
conf_mat
basándose en las clases comunes entre los dos conjuntos.