Одним из способов визуализации эффективности моделей классификации в машинном обучении является создание кривой 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?