Traccia una curva ROC in Python

Lakshay Kapoor 10 luglio 2021
  1. Definizione della curva ROC in Python
  2. Libreria Scikit-Learn in Python
  3. Codice Python per tracciare la curva ROC
  4. Codice Spiegazione Code
Traccia una curva ROC in Python

In questa guida, ti aiuteremo a conoscere meglio questa funzione Python e il metodo che puoi utilizzare per tracciare una curva ROC come output del programma.

Definizione della curva ROC in Python

Il termine curva ROC sta per curva caratteristica operativa del ricevitore. Questa curva è fondamentalmente una rappresentazione grafica delle prestazioni di qualsiasi modello di classificazione a tutte le soglie di classificazione.

Ci sono due parametri di questa curva:

  • True Positive Rate (TPR) - Sta per reale, cioè vera sensibilità
  • Tasso di falsi positivi (FPR) - Sta per pseudo, cioè falsa sensibilità

Entrambi i parametri sono noti come caratteristiche operative e vengono utilizzati come fattori per definire la curva ROC.

In Python, l’efficienza del modello è determinata osservando l’area sotto la curva (AUC). Pertanto, il modello più efficiente ha l’AUC pari a 1 e il modello meno efficiente ha l’AUC pari a 0,5.

Libreria Scikit-Learn in Python

La libreria Scikit-learn è una delle più importanti librerie open source utilizzate per eseguire l’apprendimento automatico in Python. Questa libreria è composta da molti strumenti per attività come classificazione, clustering e regressione.

In questo tutorial, vengono utilizzate diverse funzioni di questa libreria che aiuteranno a tracciare la curva ROC. Queste funzioni sono:

  • make_classification - Questa funzione viene importata perché aiuta a generare un problema di classificazione casuale di n classi creando cluster di punti.
  • RandomForestClassifier - Questa funzione viene importata come Random Forest Classifier e viene utilizzata come modello di esempio in questo tutorial su cui viene realizzata la curva ROC.
  • train_test_split - Questa funzione viene utilizzata per dividere l’intero dato in due sottoinsiemi (Train e Test) che vengono utilizzati per l’addestramento e il test dei dati.
  • roc_curve - Questa funzione viene utilizzata per restituire la curva ROC di un dato modello.

Codice Python per tracciare la 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)

Produzione:

Curva ROC in Python

Codice Spiegazione Code

Innanzitutto, vengono importate tutte le librerie e le funzioni necessarie per tracciare una curva ROC. Quindi viene definita una funzione chiamata plot_roc_curve in cui tutti i fattori critici della curva come il colore, le etichette e il titolo sono menzionati utilizzando la libreria Matplotlib. Successivamente, la funzione make_classification viene utilizzata per creare campioni casuali, quindi vengono divisi in set train e test con l’aiuto della funzione train_test_split. Qui, il rapporto train-test dei dati è 0.50. Quindi viene utilizzato l’algoritmo RandomForestClassifier per adattare i dati train_X e train_y. Infine, la funzione roc_curve viene utilizzata per tracciare la 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