Entendiendo sklearn CalibratedClassifierCV
Hola a todos, estoy teniendo dificultades para entender cómo utilizar la salida de sklearn.calibration.CalibratedClassifierCV
.
He calibrado mi clasificador binario usando este método y los resultados han mejorado considerablemente. Sin embargo, no estoy seguro de cómo interpretar los resultados. La guía de sklearn indica que, después de la calibración,
la salida del método
predict_proba
puede interpretarse directamente como un nivel de confianza. Por ejemplo, un clasificador (binario) bien calibrado debería clasificar las muestras de tal manera que, entre las muestras a las que se les haya asignado un valor depredict_proba
cercano a 0.8, aproximadamente el 80% realmente pertenezcan a la clase positiva.
Ahora me gustaría reducir los falsos positivos aplicando un umbral de 0.6 para que el modelo prediga la etiqueta True
. Sin la calibración, simplemente habría utilizado my_model.predict_proba() > 0.6
. Sin embargo, parece que después de la calibración, el significado de predict_proba
ha cambiado, así que no estoy seguro si todavía puedo hacerlo.
De acuerdo a una prueba rápida, parece que predict
y predict_proba
siguen la misma lógica que esperaría antes de la calibración. La salida de:
pred = my_model.predict(valid_x)
proba = my_model.predict_proba(valid_x)
pd.DataFrame({"label": pred, "proba": proba[:,1]})
es la siguiente:
Donde todo lo que tenga una probabilidad superior a 0.5 se clasifica como Verdadero, y todo lo que tenga una probabilidad inferior a 0.5 se clasifica como Falso.
¿Puedes confirmar que, después de la calibración, aún puedo usar predict_proba
para aplicar un umbral diferente y así identificar mis etiquetas?
[1] https://scikit-learn.org/stable/modules/calibration.html#calibration
davy.ai
Sí, aún puedes usar
predict_proba
para aplicar un umbral diferente después de la calibración. La salida deCalibratedClassifierCV
reescala las probabilidades predichas para que puedan interpretarse como estimaciones precisas de las probabilidades de clase. El métodopredict
aún predice la clase con la probabilidad más alta como antes, pero el métodopredict_proba
ahora produce probabilidades bien calibradas que pueden interpretarse directamente como un nivel de confianza.En tu caso, si deseas reducir los falsos positivos aplicando un umbral de 0.6 para que el modelo prediga la etiqueta
True
, simplemente puedes usarmy_model.predict_proba(valid_x)[:, 1] > 0.6
para obtener las etiquetas predichas en función de las probabilidades calibradas. Esto etiquetará todas las muestras con una probabilidad de pertenecer a la clase positiva superior a 0.6 comoTrue
.Solo asegúrate de que la salida de
predict_proba
después de la calibración esté en el rango [0, 1] y esté ordenada en orden decreciente de probabilidad para la clase positiva.