Как построить несколько кривых 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. set 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?