Resumen

Entrenar un modelo de regresión logística para clasificación multiclase y comparar distintos solvers es una práctica esencial para obtener el mejor rendimiento posible. Aquí se muestra cómo construir el modelo, iterar sobre múltiples configuraciones y analizar los resultados con matrices de confusión y gráficos de accuracy.

¿Cómo crear una función reutilizable para regresión logística?

El primer paso consiste en encapsular la creación del modelo dentro de una función en Python. Esto permite probar diferentes combinaciones de parámetros sin repetir código [01:03].

  • Se utiliza LogisticRegression de scikit-learn.
  • El parámetro random_state (en este caso 42) garantiza que los resultados sean reproducibles.
  • n_jobs=-1 indica que el modelo debe usar todos los núcleos del procesador disponibles.
  • El parámetro C controla la fuerza del regularizer: valores más pequeños aplican mayor regularización.

python def logistic_model(C, solver, multiclass): logistic_regression_model = LogisticRegression( random_state=42, solver=solver, multi_class=multiclass, n_jobs=-1, C=C ) return logistic_regression_model

Una primera prueba con solver saga y multiclass multinomial arroja un accuracy del 99% aproximadamente [03:10]. Sin embargo, no basta con un solo resultado; es necesario comparar configuraciones.

¿Cómo comparar múltiples solvers y estrategias multiclase?

Para encontrar la mejor combinación se itera sobre dos listas: una con las estrategias multiclase (OVR y multinomial) y otra con los distintos solvers disponibles [03:42].

¿Qué significan OVR y multinomial?

  • OVR (One vs Rest): entrena un clasificador binario por cada clase, comparando cada una contra todas las demás.
  • Multinomial: optimiza la función de pérdida de forma conjunta sobre todas las clases al mismo tiempo.

Ambas estrategias suelen dar resultados similares, pero por responsabilidad con los datos conviene evaluar las dos [06:48].

¿Cómo manejar errores de compatibilidad entre solvers y parámetros?

No todos los solvers son compatibles con todas las configuraciones. Por eso se envuelve cada iteración en un bloque try/except que simplemente omite las combinaciones inválidas sin detener la ejecución [04:32].

python params = [] scores = [] for i in multiclass: for j in solver_list: try: model = logistic_model(1, j, i) model.fit(X_train, y_train) predictions = model.predict(X_test) accuracy = accuracy_score(y_test, predictions) params.append(i + " " + j) scores.append(accuracy) except: pass

Los resultados se almacenan en dos listas: params para identificar cada combinación y scores para registrar el accuracy correspondiente.

¿Qué solver ofrece el mejor accuracy para clasificación multiclase?

Al graficar los resultados con un bar plot se observa que la gran mayoría de combinaciones alcanzan un accuracy muy cercano a 1.0, lo que confirma que la limpieza de datos y la estandarización previas fueron fundamentales [06:28].

python fig, ax = plt.subplots(figsize=(10, 10)) ax.bar(params, scores) ax.set_title("Bins accuracy") plt.xticks(rotation=90) plt.show()

Sin embargo, hay diferencias sutiles. El solver Newton-CG con estrategia multinomial presenta la barra ligeramente más alta, es decir, el mejor rendimiento [07:08]. Al entrenar el modelo final con estos parámetros se obtiene un accuracy del 99.4% y la matriz de confusión muestra apenas cuatro errores en total [07:53].

La matriz de confusión se visualiza con ConfusionMatrixDisplay, usando las clases del modelo como etiquetas y una escala de grises para mayor claridad [08:32].

python cm = confusion_matrix(y_test, predictions, labels=model.classes_) disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=model.classes_) disp.plot(cmap="gray") plt.show()

En la diagonal principal se concentran casi todas las predicciones correctas: clase 1 se predice como 1, clase 2 como 2, y así sucesivamente. Esto confirma que el modelo clasifica de forma certera.

Aunque la regresión logística alcanza su mayor rendimiento en problemas binomiales (dos clases), los resultados demuestran que también funciona muy bien en escenarios multinomiales cuando los datos están bien preparados. Si has probado otras combinaciones de solvers o regularizadores con tus propios datos, comparte tus hallazgos en los comentarios.