Nota
Haz clic aquí para descargar el código completo del ejemplo o para ejecutar este ejemplo en tu navegador a través de Binder
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()
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()
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()
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()
Tiempo total de ejecución del script: (0 minutos 0.461 segundos)