Поиск по сайту:

Построение кривой 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. Вы можете найти набор данных здесь!

  1. Изначально мы загружаем набор данных в среду с помощью функции read.csv().
  2. Разделение набора данных — важный шаг перед моделированием. Таким образом, мы используем набор данных для обучения и проверки значений данных с помощью функции createDataPartition() из документации R.
  3. Мы установили определенные показатели ошибок для оценки функционирования модели, включая показатель F1, график ROC и т. д.
  4. Наконец, мы используем функцию R glm(), чтобы применить логистическую регрессию к нашему набору данных. Далее мы тестируем модель на тестовых данных с помощью функции predict() и получаем значения метрик ошибок.
  5. Наконец, мы вычисляем показатель 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 с другими моделями машинного обучения и сообщите нам о своем понимании в разделе комментариев.

А пока оставайтесь с нами и удачного обучения!! :)