Кривая RO C для набора для тестирования с использованием пакета Caret - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь получить кривую RO C для лучшей модели из каретки на тестовом наборе. Я наткнулся на пакет MLeval, который, кажется, очень удобен (вывод очень подробный, все необходимые метрики представлены в виде графиков с использованием нескольких строк кода). Вот хороший пример: { ссылка }

Я пробую приведенный ниже код и могу получить необходимые показатели / графики для обучающего набора, но продолжаю получать ошибку, когда пытаюсь работать над набор для тестирования.

library(caret)
library(MLeval)
data(GermanCredit)

Train <- createDataPartition(GermanCredit$Class, p=0.6, list=FALSE)
training <- GermanCredit[ Train, ]
testing <- GermanCredit[ -Train, ]


ctrl <- trainControl(method = "repeatedcv", number = 10, classProbs = TRUE, savePredictions = TRUE)

mod_fit <- train(Class ~ Age + ForeignWorker + Property.RealEstate + Housing.Own + 
    CreditHistory.Critical,  data=training, method="glm", family="binomial",
    trControl = ctrl, tuneLength = 5, metric = "ROC")

pred <- predict(mod_fit, newdata=testing)
confusionMatrix(data=pred, testing$Class)

test = evalm(mod_fit) # this gives the ROC curve for test set

test1 <- evalm(pred) # I am trying this to calculate the ROC curve for the test set (I understand this should be the final curve to report), but I keep getting this error: 

Ошибка в evalm (pred): требуется фрейм данных или объект поезда Caret.

на веб-сайте пакета первый аргумент может быть кадром данных с вероятностями и наблюдаемыми данными. вы знаете, как подготовить этот фреймворк с помощью каретки? https://www.rdocumentation.org/packages/MLeval/versions/0.1/topics/evalm

спасибо

Обновление:

Это должен быть правильный сценарий, работающий хорошо, за исключением отображения более одного RO C на один график:

library(caret)
library(MLeval)
data(GermanCredit)

Train <- createDataPartition(GermanCredit$Class, p=0.6, list=FALSE)
training <- GermanCredit[ Train, ]
testing <- GermanCredit[ -Train, ]


ctrl <- trainControl(method = "repeatedcv", number = 10, classProbs = TRUE, savePredictions = TRUE)

mod_fit <- train(Class ~ Age + ForeignWorker + Property.RealEstate + Housing.Own + 
    CreditHistory.Critical,  data=training, method="glm", family="binomial",
    trControl = ctrl, tuneLength = 5, metric = "ROC")

#pred <- predict(mod_fit, newdata=testing, type="prob")

confusionMatrix(data=pred, testing$Class)

test = evalm(mod_fit) # this gives the ROC curve for test set
m1 = data.frame(pred, testing$Class)
 
test1 <- evalm(m1)

#Train and eval a second model: 
mod_fit2 <- train(Class ~ Age + ForeignWorker + Property.RealEstate + Housing.Own,  
data=training, method="glm", family="binomial",
    trControl = ctrl, tuneLength = 5, metric = "ROC")


pred2 <- predict(mod_fit2, newdata=testing, type="prob")
m2 = data.frame(pred2, testing$Class)

test2 <- evalm(m2)


# Display ROCs for both models in one graph: 

compare <- evalm(list(m1, m1), gnames=c('logistic1','logistic2')) 

Я получил последний шаг в коде из этого источника: https://www.r-bloggers.com/how-to-easily-make-a-roc-curve-in-r/

, однако он отображает только одну кривую RO C ( работает хорошо, если я хочу отображать выходные данные каретки)

1 Ответ

2 голосов
/ 10 июля 2020

Вы можете использовать следующий код

library(MLeval)
pred <- predict(mod_fit, newdata=testing, type="prob")
test1 <- evalm(data.frame(pred, testing$Class))

введите описание изображения здесь

...