sklearn.calibration.CalibratedClassifierCV

class sklearn.calibration.CalibratedClassifierCV

Calibración de la probabilidad con regresión isotónica o regresión logística.

Esta clase utiliza la validación cruzada tanto para estimar los parámetros de un clasificador como para calibrar posteriormente un clasificador. Con el valor predeterminado ensemble=True, para cada división cv ajusta una copia del estimador base al subconjunto de entrenamiento, y lo calibra utilizando el subconjunto de prueba. Para la predicción, las probabilidades predichas se promedian entre estos clasificadores calibrados individuales. Cuando ensemble=False, se utiliza la validación cruzada para obtener predicciones insesgadas, a través de cross_val_predict, que luego se utilizan para la calibración. Para la predicción, se utiliza el estimador base, entrenado con todos los datos. Este es el método implementado cuando probabilidades=True para los estimadores sklearn.svm.

Los clasificadores ya ajustados pueden calibrarse mediante el parámetro cv="prefit". En este caso, no se utiliza la validación cruzada y todos los datos proporcionados se utilizan para la calibración. El usuario debe tener cuidado manualmente de que los datos para el ajuste del modelo y la calibración estén separados.

La calibración se basa en el método decision_function del base_estimator si existe, sino en predict_proba.

Lee más en el Manual de usuario.

Parámetros
base_estimatorinstancia del estimador, default=None

El clasificador cuya salida necesita ser calibrada para proporcionar salidas predict_proba más precisas. El clasificador predeterminado es un LinearSVC.

method{“sigmoid”, “isotonic”}, default=”sigmoid”

El método a utilizar para la calibración. Puede ser “sigmoide” que corresponde al método de Platt (es decir, un modelo de regresión logística) o “isotonic” que es un enfoque no paramétrico. No se aconseja utilizar la calibración isotónica con muy pocas muestras de calibración (<<1000) ya que tiende a sobreajustarse.

cventero, generador de validación cruzada, iterable o «prefit», default=None

Determina la estrategia de división de la validación cruzada. Las entradas posibles para cv son:

  • None, para utilizar la validación cruzada de 5-pliegues (fold) por defecto,

  • entero, para especificar el número de pliegues.

  • separador de CV,

  • Un iterable que produce divisiones (train, test) como arreglos de índices.

Para entradas enteras/None, si y es binario o multiclase, se utiliza StratifiedKFold. Si y no es binario ni multiclase, se utiliza KFold.

Consulta el Manual de Usuario para conocer las distintas estrategias de validación cruzada que se pueden utilizar aquí.

Si se pasa «prefit», se asume que base_estimator ya ha sido ajustado y se utilizan todos los datos para la calibración.

Distinto en la versión 0.22: El valor predeterminado de cv, None, cambió de 3 partes a 5 partes.

n_jobsentero, default=None

Número de trabajos a ejecutar en paralelo. None significa 1 a menos que esté en un contexto joblib.parallel_backend. -1 significa utilizar todos los procesadores.

Los clones del estimador base se ajustan en paralelo a través de las iteraciones de validación cruzada. Por lo tanto, el paralelismo sólo se produce cuando cv != "prefit".

Consulta Glosario para más detalles.

Nuevo en la versión 0.24.

ensemblebool, default=True

Determina cómo se ajusta el calibrador cuando cv no es 'prefit'. Se ignora si cv='prefit'.

Si es True, el base_estimator se ajusta utilizando datos de entrenamiento y se calibra usando datos de pruebas, para cada pliegue cv. El estimador final es un conjunto de n_cv pares ajustados de clasificadores y calificadores, donde n_cv es el número de pliegues de validación cruzada. La salida es el promedio de probabilidades predichas de todos los pares.

Si es False, cv se utiliza para calcular predicciones insesgadas, a través de cross_val_predict, que luego se usan para la calibración. En el momento de la predicción, el clasificador utilizado es el base_estimator entrenado en todos los datos. Ten en cuenta que este método también se implementa internamente en los estimadores sklearn.svm con el parámetro probabilities=True.

Nuevo en la versión 0.24.

Atributos
classes_ndarray de forma (n_classes,)

Las etiquetas de clase.

calibrated_classifiers_ : list (len() equal to cv or 1 if cv="prefit" o ensemble=False)list (len() equal to cv or 1 if cv="prefit" or ensemble=False)

La lista de pares de clasificadores y calibradores.

  • Cuando cv="prefit", el base_estimator ajustado y el calibrador ajustado.

  • Cuando cv no es «prefit» y ensemble=True, n_cv ajusta los pares base_estimator y calibrador. n_cv es el número de pliegues de validación cruzada.

  • Cuando cv no es «prefit» y ensemble=False, el base_estimator se ajusta a todos los datos y ajusta el calibrador.

Distinto en la versión 0.24: Caso de clasificador único calibrado cuando ensemble=False.

Referencias

1

Obtaining calibrated probability estimates from decision trees and naive Bayesian classifiers, B. Zadrozny & C. Elkan, ICML 2001

2

Transforming Classifier Scores into Accurate Multiclass Probability Estimates, B. Zadrozny & C. Elkan, (KDD 2002)

3

Probabilistic Outputs for Support Vector Machines and Comparisons to Regularized Likelihood Methods, J. Platt, (1999)

4

Predicting Good Probabilities with Supervised Learning, A. Niculescu-Mizil & R. Caruana, ICML 2005

Ejemplos

>>> from sklearn.datasets import make_classification
>>> from sklearn.naive_bayes import GaussianNB
>>> from sklearn.calibration import CalibratedClassifierCV
>>> X, y = make_classification(n_samples=100, n_features=2,
...                            n_redundant=0, random_state=42)
>>> base_clf = GaussianNB()
>>> calibrated_clf = CalibratedClassifierCV(base_estimator=base_clf, cv=3)
>>> calibrated_clf.fit(X, y)
CalibratedClassifierCV(base_estimator=GaussianNB(), cv=3)
>>> len(calibrated_clf.calibrated_classifiers_)
3
>>> calibrated_clf.predict_proba(X)[:5, :]
array([[0.110..., 0.889...],
       [0.072..., 0.927...],
       [0.928..., 0.071...],
       [0.928..., 0.071...],
       [0.071..., 0.928...]])
>>> from sklearn.model_selection import train_test_split
>>> X, y = make_classification(n_samples=100, n_features=2,
...                            n_redundant=0, random_state=42)
>>> X_train, X_calib, y_train, y_calib = train_test_split(
...        X, y, random_state=42
... )
>>> base_clf = GaussianNB()
>>> base_clf.fit(X_train, y_train)
GaussianNB()
>>> calibrated_clf = CalibratedClassifierCV(
...     base_estimator=base_clf,
...     cv="prefit"
... )
>>> calibrated_clf.fit(X_calib, y_calib)
CalibratedClassifierCV(base_estimator=GaussianNB(), cv='prefit')
>>> len(calibrated_clf.calibrated_classifiers_)
1
>>> calibrated_clf.predict_proba([[-0.5, 0.5]])
array([[0.936..., 0.063...]])

Métodos

fit

Ajusta el modelo calibrado.

get_params

Obtiene los parámetros para este estimador.

predict

Predice el objetivo de las nuevas muestras.

predict_proba

Probabilidades de clasificación calibradas.

score

Devuelve la precisión media en los datos y etiquetas de prueba dados.

set_params

Establece los parámetros de este estimador.

fit()

Ajusta el modelo calibrado.

Parámetros
Xarray-like de forma (n_samples, n_features)

Datos de entrenamiento.

yarray-like de forma (n_samples,)

Valores objetivo.

sample_weightarray-like de forma (n_samples,), default=None

Ponderaciones de las muestras. Si es None, las muestras se ponderan por igual.

Devuelve
selfobject

Devuelve una instancia de sí misma.

get_params()

Obtiene los parámetros para este estimador.

Parámetros
deepbool, default=True

Si es True, devolverá los parámetros para este estimador y los subobjetos contenidos que son estimadores.

Devuelve
paramsdict

Los nombres de los parámetros mapeados a sus valores.

predict()

Predice el objetivo de las nuevas muestras. La clase predicha es la que tiene la mayor probabilidad, por lo que puede ser diferente de la predicción del clasificador no calibrado.

Parámetros
Xarray-like de forma (n_samples, n_features)

Las muestras.

Devuelve
Cndarray de forma (n_samples,)

La clase predicha.

predict_proba()

Probabilidades de clasificación calibradas.

Esta función devuelve las probabilidades calibradas de clasificación según cada clase en un arreglo de vectores de prueba X.

Parámetros
Xarray-like de forma (n_samples, n_features)

Las muestras.

Devuelve
Cndarray de forma (n_samples, n_classes)

Las probabilidades predichas.

score()

Devuelve la precisión media en los datos y etiquetas de prueba dados.

En la clasificación multietiqueta, se trata de la precisión del subconjunto, que es una métrica rigurosa, ya que se requiere para cada muestra que cada conjunto de etiquetas sea predicho correctamente.

Parámetros
Xarray-like de forma (n_samples, n_features)

Muestras de prueba.

yarray-like de forma (n_samples,) o (n_samples, n_outputs)

Etiquetas verdaderas para X.

sample_weightarray-like de forma (n_samples,), default=None

Ponderaciones de la muestra.

Devuelve
scorefloat

Precisión media de self.predict(X) con respecto a y.

set_params()

Establece los parámetros de este estimador.

El método funciona tanto en estimadores simples como en objetos anidados (como Pipeline). Estos últimos tienen parámetros de la forma <component>__<parameter> para que sea posible actualizar cada componente de un objeto anidado.

Parámetros
**paramsdict

Parámetros del estimador.

Devuelve
selfinstancia de estimador

Instancia del estimador.