python - fit_transform - sklearn LogisticRegression y cambiar el umbral predeterminado para la clasificación
logistic regression sklearn (1)
Estoy usando LogisticRegression del paquete sklearn y tengo una pregunta rápida sobre la clasificación. Construí una curva ROC para mi clasificador, y resulta que el umbral óptimo para mis datos de entrenamiento es alrededor de 0.25. Asumo que el valor predeterminado al crear predicciones en 0.5. ¿Cómo puedo cambiar esta configuración predeterminada para averiguar cuál es la precisión en mi modelo al hacer una validación cruzada de 10 pliegues? Básicamente, quiero que mi modelo prediga un ''1'' para cualquier persona mayor de 0.25, no 0.5. He estado revisando toda la documentación, y parece que no puedo llegar a ninguna parte.
Gracias de antemano por tu ayuda.
Esa no es una característica incorporada. Puede "agregarlo" envolviendo la clase LogisticRegression en su propia clase y agregando un atributo de threshold
que use dentro de un método de predict()
personalizado predict()
.
Sin embargo, algunas precauciones:
- El umbral predeterminado es en realidad 0.
LogisticRegression.decision_function()
devuelve una distancia firmada al hiperplano de separación seleccionado. Si está buscandopredict_proba()
, entonces está mirandologit()
de la distancia del hiperplano con un umbral de 0.5. Pero eso es más costoso de calcular. - Al seleccionar el umbral "óptimo" de esta manera, está utilizando información posterior al aprendizaje, lo que estropea su conjunto de pruebas (es decir, su prueba o conjunto de validación ya no proporciona una estimación imparcial del error fuera de muestra). Por lo tanto, puede estar induciendo un exceso de ajuste a menos que elija el umbral dentro de un bucle de validación cruzada en su conjunto de entrenamiento solamente, luego utilícelo y el clasificador entrenado con su conjunto de prueba.
- Considere usar
class_weight
si tiene un problema desequilibrado en lugar de establecer manualmente el umbral. Esto debería obligar al clasificador a elegir un hiperplano más alejado de la clase de mayor interés.