Guía 1

TP3 - Duda sobre el parámetro de regularización

TP3 - Duda sobre el parámetro de regularización

de BOHNER JUAN IGNACIO -
Número de respuestas: 1

Hola, buenas tardes.

Estoy teniendo dificultades en definir qué valor del parámetro C (equivalente a 1λ) de la función LogisticRegression() utilizar. Ya probé su funcionamiento con los siguientes valores: C = {1, 1e-1, 1e-2, 1e-3, 1e-4}. En todos los casos, obtuve casi la misma accuracy en el set de testeo, aproximadamente entre 64% y 65%. Tampoco afectaba notoriamente el desempeño en el set de entrenamiento.

Aclaro por las dudas: para hacer la regresión logística, armo el siguiente pipeline:

  1. Definir modelo polinómico de grado 2 → PolynomialFeatures(degree=2, include_bias=False).

  2. Aplicar una normalización, ya que los términos cuadráticos suelen tener escalas diferentes a la original. Además, esto ayuda a que la regresión logística converja mejor → StandardScaler().

  3. Regresión logística → LogisticRegression(penalty='l2', C=C_value, max_iter=N, random_state=42, tol=1e-3).

Al establecer un valor alto de max_iter y/o un valor de tol no tan bajo (tol < 1e-3), logro que el modelo converja correctamente y evito el mensaje de error ConvergenceWarning.

Hay dos cosas que me generan dudas respecto a los resultados que estoy obteniendo:

  1. Como mencioné antes, es extraño que la accuracy en el set de testeo casi no varíe cuando cambio drásticamente el valor del parámetro C.

  2. Sí noté cambios en la accuracy del set de entrenamiento al modificar la tolerancia o max_iter. Mientras mayor sea el valor de max_iter o menor sea el valor de tol, la predicción para el set de entrenamiento mejora (lo cual tiene sentido), pero me resulta raro que esto no afecte negativamente la predicción en el set de testeo.

Inicialmente, usé un valor alto de tol, lo que hacía que el ajuste se detuviera más rápido, obteniendo aproximadamente un 75% de accuracy en el set de entrenamiento y un 65% en el de testeo. Luego, al disminuir tol, el algoritmo tardaba más en ejecutarse y la accuracy en el set de entrenamiento mejoraba notoriamente, alcanzando un 94% de acierto en la predicción. Lo que me resulta extraño es que, a pesar de esta diferencia, no parece haber problemas de overfitting, ya que la accuracy en el set de testeo se mantiene prácticamente constante (64%-65%).

El mayor problema de todo esto es que cada prueba demora casi 30 minutos, así que no puedo hacer muchas simulaciones para analizar en detalle cómo se comporta el modelo al cambiar los parámetros.

Agradezco cualquier comentario o sugerencia que me puedan dar.  

Saludos.

En respuesta a BOHNER JUAN IGNACIO

Re: TP3 - Duda sobre el parámetro de regularización

de VERA MATIAS ALEJANDRO -
Hola Juan,

Tranquilo, ya con lo que tenés podés cerrar el tp. Pero si te da curiosidad y querés chequear que es lo que pasa, te dejo algunos comentarios:

* El valor de accuracy de testeo es razonable, no esperaba mucho más que eso.
* Me deja tranquilo que el de entrenamiento si te varía, ese seguro que empeora a medida que crece lambda (o baja C).
* El accuracy de testeo se tiene que romper en algún momento, pero quizás el C que lo logra esté más lejos (1e-6 o 1e-7 quizás ¿?)
* Quizás tol=1e-3 sea mucho (el default es 1e-4). No me queda claro que métrica compara con tol sklearn...
* Si ya obtuviste un acc de entrenamiento de 94% me da a entender que más grado de polinomio no va a ayudar en nada.
* Habría que preguntarse cuanto vale el error bayesiano. Un buen criterio para aproximar el error bayesiano es probar si vos a ojo distinguís las imágenes. Quizás esto te hace concluir que alcanzaste lo mejor que se puede.
* ¿Qué ocurriría si uso polinomios pero no regularizo? Sería poner "penalty=None", C=infinito puede traer problemas. Dependiendo de lo que te de podés sacar dos conclusiones:
A) El acc de testing baja. Estarías viendo el overfitting, mostrando que regularizar ayuda.
B) El acc de testing sigue en ese rango (y el de train va a ser muy pero muy bueno). Casi hice desaparece el error de sesgo, pero el gap de generalización me molesta. En este caso debería poner el foco en lambdas mucho más grandes (o C mucho más chicos).

Espero que estas ideas sueltas te ayuden a entender que está ocurriendo. La estadística puede ser misteriosa.

Éxitos