Jak wykreślić wiele krzywych roc w pythonie (z przykładem)
Jednym ze sposobów wizualizacji wydajności modeli klasyfikacji w uczeniu maszynowym jest utworzenie krzywej ROC , która oznacza krzywą „charakterystyki operacyjnej odbiornika”.
Często możesz chcieć dopasować wiele modeli klasyfikacji do jednego zbioru danych i utworzyć krzywą ROC dla każdego modelu, aby zwizualizować, który model najlepiej radzi sobie z danymi.
Poniższy przykład krok po kroku pokazuje, jak wykreślić wiele krzywych ROC w Pythonie.
Krok 1: Zaimportuj niezbędne pakiety
Najpierw zaimportujemy kilka niezbędnych pakietów do Pythona:
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
Krok 2: Utwórz fałszywe dane
Następnie użyjemy funkcji make_classification() sklearna, aby utworzyć fałszywy zbiór danych zawierający 1000 wierszy, cztery zmienne predykcyjne i binarną zmienną odpowiedzi:
#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 )
Krok 3: Dopasuj wiele modeli i wykreśl krzywe ROC
Następnie dopasujemy do danych model regresji logistycznej, a następnie model ze wzmocnionym gradientem i wykreślimy krzywą ROC dla każdego modelu na tym samym wykresie:
#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 ()
Niebieska linia przedstawia krzywą ROC dla modelu regresji logistycznej, a pomarańczowa linia przedstawia krzywą ROC dla modelu ze wzmocnionym gradientem.
Im bardziej krzywa ROC pasuje do lewego górnego rogu wykresu, tym lepiej model jest w stanie sklasyfikować dane w kategorie.
Aby to określić ilościowo, możemy obliczyć AUC – obszar pod krzywą – który mówi nam, jaka część wykresu znajduje się pod krzywą.
Im AUC jest bliższe 1, tym lepszy model.
Z naszego wykresu możemy zobaczyć następujące wskaźniki AUC dla każdego modelu:
- AUC modelu regresji logistycznej: 0,7902
- AUC modelu wzmocnionego gradientem: 0,9712
Oczywiście model ze wzmocnieniem gradientowym jest skuteczniejszy w klasyfikacji danych na kategorie niż model regresji logistycznej.
Dodatkowe zasoby
Poniższe samouczki zawierają dodatkowe informacje na temat modeli klasyfikacji i krzywych ROC:
Wprowadzenie do regresji logistycznej
Jak interpretować krzywą ROC (z przykładami)
Co uważa się za dobry wynik AUC?