Como traçar múltiplas curvas roc em python (com exemplo)


Uma forma de visualizar o desempenho dos modelos de classificação em aprendizado de máquina é criar uma curva ROC , que significa curva “característica operacional do receptor”.

Freqüentemente, você pode querer ajustar vários modelos de classificação a um único conjunto de dados e criar uma curva ROC para cada modelo para visualizar qual modelo tem melhor desempenho nos dados.

O exemplo passo a passo a seguir mostra como traçar várias curvas ROC em Python.

Passo 1: Importe os pacotes necessários

Primeiro, importaremos vários pacotes necessários para Python:

 from sklearn import metrics
from sklearn import datasets
from sklearn. model_selection import train_test_split
from sklearn. linear_model import LogisticRegression
from sklearn. set import GradientBoostingClassifier
import numpy as np
import matplotlib. pyplot as plt

Etapa 2: criar dados falsos

A seguir, usaremos a função make_classification() do sklearn para criar um conjunto de dados falso com 1.000 linhas, quatro variáveis preditoras e uma variável de resposta binária:

 #create fake dataset
X, y = datasets. make_classification (n_samples= 1000 ,
                                    n_features= 4 ,
                                    n_informative= 3 ,
                                    n_redundant= 1 ,
                                    random_state= 0 )

#split dataset into training and testing set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= .3 , random_state= 0 )

Etapa 3: ajustar vários modelos e traçar curvas ROC

A seguir, ajustaremos um modelo de regressão logística e, em seguida, um modelo com gradiente aprimorado aos dados e traçaremos a curva ROC para cada modelo no mesmo gráfico:

 #set up plotting area
plt. Figure (0). clf ()

#fit logistic regression model and plot ROC curve
model = LogisticRegression()
model. fit (X_train, y_train)
y_pred = model. predict_proba (X_test)[:, 1]
fpr, tpr, _ = metrics. roc_curve (y_test, y_pred)
auc = round(metrics. roc_auc_score (y_test, y_pred), 4)
plt. plot (fpr,tpr,label="Logistic Regression, AUC="+str(auc))

#fit gradient boosted model and plot ROC curve
model = GradientBoostingClassifier()
model. fit (X_train, y_train)
y_pred = model. predict_proba (X_test)[:, 1]
fpr, tpr, _ = metrics. roc_curve (y_test, y_pred)
auc = round(metrics. roc_auc_score (y_test, y_pred), 4)
plt. plot (fpr,tpr,label="Gradient Boosting, AUC="+str(auc))

#add legend
plt. legend () 

traçar múltiplas curvas ROC em Python

A linha azul mostra a curva ROC para o modelo de regressão logística e a linha laranja mostra a curva ROC para o modelo gradiente reforçado.

Quanto mais próxima a curva ROC estiver do canto superior esquerdo do gráfico, melhor o modelo será capaz de classificar os dados em categorias.

Para quantificar isto, podemos calcular a AUC – área sob a curva – que nos diz quanto do gráfico está sob a curva.

Quanto mais próximo o AUC estiver de 1, melhor será o modelo.

Em nosso gráfico, podemos ver as seguintes métricas de AUC para cada modelo:

  • AUC do modelo de regressão logística: 0,7902
  • AUC do modelo com gradiente reforçado: 0,9712

Obviamente, o modelo com gradiente aprimorado é mais bem-sucedido na classificação dos dados em categorias do que o modelo de regressão logística.

Recursos adicionais

Os tutoriais a seguir fornecem informações adicionais sobre modelos de classificação e curvas ROC:

Introdução à regressão logística
Como interpretar uma curva ROC (com exemplos)
O que é considerado uma boa pontuação AUC?

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *