Criando Visualizações com Objetos de Exibição

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, aprenderemos a criar visualizações com objetos de exibição usando o scikit-learn. Objetos de exibição são classes que nos permitem criar visualizações diretamente a partir de suas respectivas métricas. Neste laboratório, usaremos os objetos de exibição ConfusionMatrixDisplay, RocCurveDisplay e PrecisionRecallDisplay para criar visualizações para um problema de classificação binária.

Dicas da Máquina Virtual

Após o início da VM, clique no canto superior esquerdo para mudar para a aba Notebook para acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação de operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para você.

Carregar Dados e Treinar o Modelo

Neste exemplo, usaremos um conjunto de dados de um centro de serviço de transfusão sanguínea do OpenML. A variável-alvo indica se um indivíduo doou sangue. Primeiro, os dados são divididos em conjuntos de treinamento e teste, e então um modelo de regressão logística é ajustado com o conjunto de dados de treinamento.

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, parser="pandas")
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)

Criar ConfusionMatrixDisplay

Com o modelo ajustado, calculamos as previsões do modelo no conjunto de dados de teste. Essas previsões são usadas para calcular a matriz de confusão, que é plotada com o 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()

Criar RocCurveDisplay

A curva ROC requer probabilidades ou valores de decisão não limiarizados do estimador. Como a regressão logística fornece uma função de decisão, usaremos-a para plotar a 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()

Criar PrecisionRecallDisplay

Analogamente, a curva precisão-revocação pode ser plotada usando y_score da seção anterior.

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 Objetos de Exibição em um Único Gráfico

Os objetos de exibição armazenam os valores calculados que foram passados como argumentos. Isso permite que as visualizações sejam facilmente combinadas usando a API do Matplotlib. No exemplo a seguir, os gráficos são colocados lado a lado em uma linha.

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()

Resumo

Neste laboratório, aprendemos a criar visualizações com objetos de exibição usando o scikit-learn. Usamos os objetos de exibição ConfusionMatrixDisplay, RocCurveDisplay e PrecisionRecallDisplay para criar visualizações para um problema de classificação binária. Primeiro, carregamos os dados e treinamos um modelo de regressão logística. Em seguida, criamos a matriz de confusão, a curva ROC e a curva precisão-revocação usando objetos de exibição. Finalmente, combinamos os objetos de exibição em um único gráfico usando a API do Matplotlib.