Як побудувати кілька кривих 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?