Как построить несколько кривых ROC в Python (с примером)


Одним из способов визуализации эффективности моделей классификации в машинном обучении является создание кривой ROC , которая означает кривую «рабочей характеристики приемника».

Часто вам может потребоваться подогнать несколько моделей классификации к одному набору данных и создать кривую ROC для каждой модели, чтобы визуализировать, какая модель лучше всего работает с данными.

В следующем пошаговом примере показано, как построить несколько кривых ROC в Python.

Шаг 1: Импортируйте необходимые пакеты

Во-первых, мы импортируем несколько необходимых пакетов в 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. ensemble import GradientBoostingClassifier
import numpy as np
import matplotlib.pyplot as plt

Шаг 2: Создайте поддельные данные

Далее мы будем использовать функцию make_classification() из sklearn для создания поддельного набора данных с 1000 строками, четырьмя переменными-предикторами и одной переменной бинарного ответа:

#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 )

Шаг 3. Подгонка нескольких моделей и построение кривых ROC

Затем мы подгоним модель логистической регрессии, а затем модель с градиентным усилением к данным и построим кривую ROC для каждой модели на одном графике:

#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() 

Синяя линия показывает кривую ROC для модели логистической регрессии, а оранжевая линия показывает кривую ROC для модели с градиентным усилением.

Чем больше кривая ROC охватывает верхний левый угол графика, тем лучше модель классифицирует данные по категориям.

Чтобы дать количественную оценку, мы можем рассчитать AUC — площадь под кривой, которая говорит нам, какая часть графика расположена под кривой.

Чем ближе AUC к 1, тем лучше модель.

На нашем графике мы видим следующие показатели AUC для каждой модели:

  • AUC модели логистической регрессии: 0,7902
  • AUC модели с градиентным усилением: 0,9712

Очевидно, что модель с градиентным усилением лучше справляется с классификацией данных по категориям по сравнению с моделью логистической регрессии.

Дополнительные ресурсы

В следующих руководствах представлена дополнительная информация о моделях классификации и кривых ROC:

Введение в логистическую регрессию
Как интерпретировать кривую ROC (с примерами)
Что считается хорошей оценкой AUC?