Hoe meerdere roc-curven in python te plotten (met voorbeeld)
Eén manier om de prestaties van classificatiemodellen in machine learning te visualiseren is door een ROC-curve te creëren, wat staat voor ‘receiver operating karakteristieke’ curve.
Vaak wilt u mogelijk meerdere classificatiemodellen in één gegevensset passen en voor elk model een ROC-curve maken om te visualiseren welk model het beste op de gegevens presteert.
Het volgende stapsgewijze voorbeeld laat zien hoe u meerdere ROC-curven in Python kunt plotten.
Stap 1: Importeer de benodigde pakketten
Eerst zullen we verschillende noodzakelijke pakketten in Python importeren:
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
Stap 2: Maak valse gegevens aan
Vervolgens gebruiken we de functie make_classification() van sklearn om een nepgegevensset te maken met 1000 rijen, vier voorspellende variabelen en een binaire responsvariabele:
#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 )
Stap 3: Pas meerdere modellen aan en teken ROC-curven
Vervolgens passen we een logistisch regressiemodel en vervolgens een gradiënt-verbeterd model aan de gegevens toe en plotten we de ROC-curve voor elk model op dezelfde plot:
#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 ()
De blauwe lijn toont de ROC-curve voor het logistische regressiemodel en de oranje lijn toont de ROC-curve voor het gradiëntversterkte model.
Hoe dichter een ROC-curve bij de linkerbovenhoek van de grafiek past, hoe beter het model de gegevens in categorieën kan indelen.
Om dit te kwantificeren kunnen we de AUC (gebied onder de curve) berekenen, die ons vertelt hoeveel van de grafiek zich onder de curve bevindt.
Hoe dichter de AUC bij 1 ligt, hoe beter het model.
Uit ons diagram kunnen we voor elk model de volgende AUC-statistieken zien:
- AUC van logistisch regressiemodel: 0,7902
- AUC van gradiëntversterkt model: 0,9712
Het is duidelijk dat het gradiënt-verbeterde model succesvoller is in het classificeren van de gegevens in categorieën dan het logistische regressiemodel.
Aanvullende bronnen
De volgende tutorials bieden aanvullende informatie over classificatiemodellen en ROC-curven:
Inleiding tot logistieke regressie
Een ROC-curve interpreteren (met voorbeelden)
Wat wordt beschouwd als een goede AUC-score?