Visualizaciones con Objetos de Visualización

En este ejemplo, construiremos objetos de visualización, ConfusionMatrixDisplay, RocCurveDisplay, y PrecisionRecallDisplay directamente desde sus respectivas métricas. Se trata de una alternativa al uso de sus correspondientes funciones de graficación cuando las predicciones de un modelo ya están calculadas o son costosas de calcular. Ten en cuenta que se trata de un uso avanzado y que, en general, se recomienda utilizar sus respectivas funciones de trazado.

print(__doc__)

Cargar Datos y entrenar el modelo

Para este ejemplo, cargamos un conjunto de datos del centro de servicios de transfusión de sangre de OpenML <https://www.openml.org/d/1464>. Se trata de un problema de clasificación binaria cuyo objetivo es saber si un individuo ha donado sangre. Luego, los datos se dividen en un conjunto de datos de entrenamiento y otro de prueba y se ajusta una regresión logística con el conjunto de datos de entrenamiento.

from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

X, y = fetch_openml(data_id=1464, return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)

clf = make_pipeline(StandardScaler(), LogisticRegression(random_state=0))
clf.fit(X_train, y_train)

Out:

Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression(random_state=0))])

Crear una ConfusionMatrixDisplay

Con el modelo ajustado, calculamos las predicciones del modelo en el conjunto de datos de prueba. Estas predicciones se utilizan para calcular la matriz de confusión que se representa con la clase ConfusionMatrixDisplay

from sklearn.metrics import confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay

y_pred = clf.predict(X_test)
cm = confusion_matrix(y_test, y_pred)

cm_display = ConfusionMatrixDisplay(cm).plot()
plot display object visualization

Crear una RocCurveDisplay

La curva roc requiere las probabilidades o los valores de decisión sin umbral del estimador. Dado que la regresión logística proporciona una función de decisión, la utilizaremos para graficar la curva roc:

from sklearn.metrics import roc_curve
from sklearn.metrics import RocCurveDisplay
y_score = clf.decision_function(X_test)

fpr, tpr, _ = roc_curve(y_test, y_score, pos_label=clf.classes_[1])
roc_display = RocCurveDisplay(fpr=fpr, tpr=tpr).plot()
plot display object visualization

Crear PrecisionRecallDisplay

Del mismo modo, la curva de precisión y exhaustividad se puede graficar utilizando y_score de las secciones de previsión.

from sklearn.metrics import precision_recall_curve
from sklearn.metrics import PrecisionRecallDisplay

prec, recall, _ = precision_recall_curve(y_test, y_score,
                                         pos_label=clf.classes_[1])
pr_display = PrecisionRecallDisplay(precision=prec, recall=recall).plot()
plot display object visualization

Combinar los objetos de visualización en un único gráfico

Los objetos de visualización almacenan los valores calculados que se pasaron como argumentos. Esto permite combinar fácilmente las visualizaciones utilizando la API de matplotlib. En el siguiente ejemplo, colocamos las visualizaciones una al lado de la otra en una fila.

import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 8))

roc_display.plot(ax=ax1)
pr_display.plot(ax=ax2)
plt.show()
plot display object visualization

Tiempo total de ejecución del script: (0 minutos 0.461 segundos)

Galería generada por Sphinx-Gallery