Trace uma curva ROC em Python

Lakshay Kapoor 30 janeiro 2023
  1. Definição de Curva ROC em Python
  2. Biblioteca Scikit-Learn em Python
  3. Código Python para traçar a curva ROC
  4. Explicação do código
Trace uma curva ROC em Python

Neste guia, vamos ajudá-lo a saber mais sobre esta função Python e o método que você pode usar para plotar uma curva ROC como a saída do programa.

Definição de Curva ROC em Python

O termo curva ROC significa curva de característica de operação do receptor. Essa curva é basicamente uma representação gráfica do desempenho de qualquer modelo de classificação em todos os limites de classificação.

Existem dois parâmetros desta curva:

  • Taxa de Positivo Verdadeiro (TPR) - Significa verdadeiro, ou seja, sensibilidade verdadeira
  • Taxa de falso positivo (FPR) - Significa pseudo, ou seja, falsa sensibilidade

Ambos os parâmetros são conhecidos como características operacionais e são usados ​​como fatores para definir a curva ROC.

Em Python, a eficiência do modelo é determinada pela visualização da área sob a curva (AUC). Assim, o modelo mais eficiente possui AUC igual a 1, e o modelo menos eficiente possui AUC igual a 0,5.

Biblioteca Scikit-Learn em Python

A biblioteca Scikit-learn é uma das mais importantes bibliotecas de código aberto usadas para realizar o aprendizado de máquina em Python. Esta biblioteca consiste em muitas ferramentas para tarefas como classificação, agrupamento e regressão.

Neste tutorial, várias funções desta biblioteca são usadas para ajudar na plotagem da curva ROC. Essas funções são:

  • make_classification - Esta função é importada porque ajuda a gerar um problema de classificação aleatória de n classes criando clusters de pontos.
  • RandomForestClassifier - Esta função é importada como Random Forest Classifier e é usada como um modelo de amostra neste tutorial no qual a curva ROC é feita.
  • train_test_split - Esta função é usada para dividir todos os dados em dois subconjuntos (Train e Test) que são usados ​​para treinar e testar os dados.
  • roc_curve - Esta função é usada para retornar a curva ROC de um determinado modelo.

Código Python para traçar a curva ROC

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve


def plot_roc_curve(fper, tper):
    plt.plot(fper, tper, color="red", label="ROC")
    plt.plot([0, 1], [0, 1], color="green", linestyle="--")
    plt.xlabel("False Positive Rate")
    plt.ylabel("True Positive Rate")
    plt.title("Receiver Operating Characteristic Curve")
    plt.legend()
    plt.show()


data_X, cls_lab = make_classification(
    n_samples=2100, n_classes=2, weights=[1, 1], random_state=2
)
train_X, test_X, train_y, test_y = train_test_split(
    data_X, cls_lab, test_size=0.5, random_state=2
)

model = RandomForestClassifier()
model.fit(train_X, train_y)

prob = model.predict_proba(test_X)
prob = probs[:, 1]
fper, tper, thresholds = roc_curve(test_y, prob)
plot_roc_curve(fper, tper)

Resultado:

Curva ROC em Python

Explicação do código

Primeiro, todas as bibliotecas e funções necessárias para plotar uma curva ROC são importadas. Em seguida, uma função chamada plot_roc_curve é definida na qual todos os fatores críticos da curva como a cor, rótulos e título são mencionados usando a biblioteca Matplotlib. Depois disso, a função make_classification é usada para fazer amostras aleatórias, e então elas são divididas em conjuntos train e test com a ajuda da função train_test_split. Aqui, a proporção train-test dos dados é 0.50. Em seguida, o algoritmo RandomForestClassifier é usado para ajustar os dados train_X e train_y. Finalmente, a função roc_curve é usada para plotar a Curva ROC.

Lakshay Kapoor avatar Lakshay Kapoor avatar

Lakshay Kapoor is a final year B.Tech Computer Science student at Amity University Noida. He is familiar with programming languages and their real-world applications (Python/R/C++). Deeply interested in the area of Data Sciences and Machine Learning.

LinkedIn