Hola a todos, tengo problemas para entender cómo usar la salida de sklearn.calibration.CalibratedClassifierCV .
He calibrado mi clasificador binario usando este método y los resultados han mejorado mucho. Sin embargo, no estoy seguro de cómo interpretar los resultados. La guía Sklearn establece que, después de la calibración,
la salida del método
predict_probase puede interpretar directamente como un nivel de confianza. Por ejemplo, un clasificador (binario) bien calibrado debería clasificar las muestras de forma que, entre las muestras a las que dio un valor predict_proba cercano a 0,8, aproximadamente el 80 % perteneciera realmente a la clase positiva.
Ahora me gustaría reducir los falsos positivos aplicando un límite de .6 para que el modelo prediga la etiqueta True . Sin la calibración, simplemente habría usado my_model.predict_proba() > .6 . Sin embargo, parece que después de la calibración, el significado de predict_proba ha cambiado, por lo que no estoy seguro de poder seguir haciendo eso.
A partir de 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]})Donde todo lo que tiene una probabilidad superior a 0,5 se clasifica como Verdadero y todo lo que está por debajo de 0,5 como Falso.
¿Puede confirmar que, después de la calibración, todavía puedo usar predict_proba para aplicar un límite diferente para identificar mis etiquetas?
2 https://scikit-learn.org/stable/modules/calibration.html#calibration
Para mí, puede usar predict_proba() después de la calibración para aplicar un límite diferente.
Lo que sucede dentro de la clase CalibratedClassifierCV (como notó) es efectivamente que la salida de predict() se basa en la salida de predict_proba() (ver aquí como referencia), es decir, np.argmax(self.predict_proba(X), axis=1) == self.predict(X) .
Por otro lado, para el clasificador no calibrado que está pasando a CalibratedClassifierCV (dependiendo de si es un clasificador probabilístico o no), la igualdad anterior puede o no ser válida (por ejemplo, no es así para un clasificador SVC() - ver aquí , por ejemplo, para algunos otros detalles sobre esto).