Построение кривой ROC в R Programming
Привет, народ! В этой статье мы подробно рассмотрим важную метрику ошибок машинного обучения — построение кривой ROC в программировании на R.
Итак, начнем!!
Необходимость кривой ROC
Метрики ошибок позволяют нам оценить и обосновать работу модели в конкретном наборе данных.
График ROC является одной из таких метрик ошибок.
График ROC, также известный как кривая ROC AUC, представляет собой показатель ошибки классификации. То есть он измеряет функционирование и результаты алгоритмов машинного обучения классификации.
Чтобы быть точным, кривая ROC представляет собой кривую вероятности значений, тогда как AUC является мерой разделимости различных групп значений/меток. С помощью кривой ROC AUC
можно анализировать и делать выводы о том, какое количество значений было правильно выделено и классифицировано моделью в соответствии с метками.
Чем выше показатель AUC, тем лучше классификация прогнозируемых значений.
Например, рассмотрим модель для прогнозирования и классификации того, будет ли результат броска «орел» или «решка».
Таким образом, если показатель AUC высокий, это указывает на то, что модель способна более эффективно классифицировать «Орел» как «Орел» и «Решка» как «Решка».
С технической точки зрения, кривая ROC строится между истинной положительной частотой и ложноположительной частотой модели.
Давайте теперь попробуем реализовать концепцию кривой ROC в следующем разделе!
Метод I: использование функции plot()
Мы можем использовать графики ROC для оценки моделей машинного обучения, как обсуждалось ранее. Итак, давайте попробуем реализовать концепцию кривой ROC в сравнении с моделью логистической регрессии.
Начнем!! :)
В этом примере мы будем использовать набор данных о неплатежеспособности банковского кредита для моделирования с помощью логистической регрессии. Мы будем строить кривую ROC, используя функцию plot()
из библиотеки pROC. Вы можете найти набор данных здесь!
- Изначально мы загружаем набор данных в среду с помощью функции read.csv().
- Разделение набора данных — важный шаг перед моделированием. Таким образом, мы используем набор данных для обучения и проверки значений данных с помощью
функции createDataPartition()
из документации R. - Мы установили определенные показатели ошибок для оценки функционирования модели, включая показатель F1, график ROC и т. д.
- Наконец, мы используем функцию R
glm()
, чтобы применить логистическую регрессию к нашему набору данных. Далее мы тестируем модель на тестовых данных с помощью функции predict() и получаем значения метрик ошибок. - Наконец, мы вычисляем показатель roc AUC для модели с помощью
метода roc()
и строим то же самое с помощью функции plot(), доступной в библиотеке ‘pROC’.
rm(list = ls())
#Setting the working directory
setwd("D:/Edwisor_Project - Loan_Defaulter/")
getwd()
#Load the dataset
dta = read.csv("bank-loan.csv",header=TRUE)
### Data SAMPLING ####
library(caret)
set.seed(101)
split = createDataPartition(data$default, p = 0.80, list = FALSE)
train_data = data[split,]
test_data = data[-split,]
#error metrics -- Confusion Matrix
err_metric=function(CM)
{
TN =CM[1,1]
TP =CM[2,2]
FP =CM[1,2]
FN =CM[2,1]
precision =(TP)/(TP+FP)
recall_score =(FP)/(FP+TN)
f1_score=2*((precision*recall_score)/(precision+recall_score))
accuracy_model =(TP+TN)/(TP+TN+FP+FN)
False_positive_rate =(FP)/(FP+TN)
False_negative_rate =(FN)/(FN+TP)
print(paste("Precision value of the model: ",round(precision,2)))
print(paste("Accuracy of the model: ",round(accuracy_model,2)))
print(paste("Recall value of the model: ",round(recall_score,2)))
print(paste("False Positive rate of the model: ",round(False_positive_rate,2)))
print(paste("False Negative rate of the model: ",round(False_negative_rate,2)))
print(paste("f1 score of the model: ",round(f1_score,2)))
}
# 1. Logistic regression
logit_m =glm(formula = default~. ,data =train_data ,family='binomial')
summary(logit_m)
logit_P = predict(logit_m , newdata = test_data[-13] ,type = 'response' )
logit_P <- ifelse(logit_P > 0.5,1,0) # Probability check
CM= table(test_data[,13] , logit_P)
print(CM)
err_metric(CM)
#ROC-curve using pROC library
library(pROC)
roc_score=roc(test_data[,13], logit_P) #AUC score
plot(roc_score ,main ="ROC curve -- Logistic Regression ")
Выход:
Метод II: использование функции roc.plot()
Программирование R предоставляет нам другую библиотеку под названием «проверка» для построения кривой ROC-AUC для модели.
Чтобы использовать эту функцию, нам нужно установить и импортировать библиотеку проверки
в нашу среду.
Сделав это, мы наносим данные на график с помощью функции roc.plot()
для четкой оценки между «чувствительностью» и «специфичностью» значений данных, как показано ниже.
install.packages("verification")
library(verification)
x<- c(0,0,0,1,1,1)
y<- c(.7, .7, 0, 1,5,.6)
data<-data.frame(x,y)
names(data)<-c("yes","no")
roc.plot(data$yes, data$no)
Выход:
Заключение
На этом мы подошли к концу этой темы. Не стесняйтесь комментировать ниже, если у вас возникнут какие-либо вопросы.
Попробуйте реализовать концепцию графиков ROC с другими моделями машинного обучения и сообщите нам о своем понимании в разделе комментариев.
А пока оставайтесь с нами и удачного обучения!! :)