r - 如何为不同的插入符号训练模型绘制 AUC ROC?
问题描述
这是一个代表
library(caret)
library(dplyr)
set.seed(88, sample.kind = "Rounding")
mtcars <- mtcars %>%
mutate(am = as.factor(am))
test_index <- createDataPartition(mtcars$am, times = 1, p= 0.2, list = F)
train_cars <- mtcars[-test_index,]
test_cars <- mtcars[test_index,]
set.seed(88, sample.kind = "Rounding")
cars_nb <- train(am ~ mpg + cyl,
data = train_cars, method = "nb",
trControl = trainControl(method = "cv", number = 10, savePredictions = "final"))
cars_glm <- train(am ~ mpg + cyl,
data = train_cars, method = "glm",
trControl = trainControl(method = "cv", number = 10, savePredictions = "final"))
我的问题是,我将如何在单个图上创建 AUC ROC 曲线以直观地比较两个模型?
解决方案
我假设您想在测试集上显示 ROC 曲线,这与使用训练数据的评论中指出的问题(插入符号中的训练数据的 ROC 曲线)不同。
首先要做的是提取对测试数据 ( newdata=test_cars
) 的预测,以概率 ( type="prob"
) 的形式:
predictions_nb <- predict(cars_nb, newdata=test_cars, type="prob")
predictions_glm <- predict(cars_glm, newdata=test_cars, type="prob")
这为我们提供了一个属于 0 类或 1 类概率的 data.frame。让我们仅使用 1 类的概率:
predictions_nb <- predict(cars_nb, newdata=test_cars, type="prob")[,"1"]
predictions_glm <- predict(cars_glm, newdata=test_cars, type="prob")[,"1"]
接下来我将使用 pROC 包为训练数据创建 ROC 曲线(免责声明:我是这个包的作者。还有其他方法可以达到结果,但这是我最熟悉的一种):
library(pROC)
roc_nb <- roc(test_cars$am, predictions_nb)
roc_glm <- roc(test_cars$am, predictions_glm)
最后,您可以绘制曲线。要使用 pROC 包获得两条曲线,请使用该lines
函数将第二条 ROC 曲线的线添加到绘图中
plot(roc_nb, col="green")
lines(roc_glm, col="blue")
为了使其更具可读性,您可以添加一个图例:
legend("bottomright", col=c("green", "blue"), legend=c("NB", "GLM"), lty=1)
并使用 AUC:
legend_nb <- sprintf("NB (AUC: %.2f)", auc(roc_nb))
legend_glm <- sprintf("GLM (AUC: %.2f)", auc(roc_glm))
legend("bottomright",
col=c("green", "blue"), lty=1,
legend=c(legend_nb, legend_glm))
推荐阅读
- ruby-on-rails - Rails 6集成测试异常太长
- html - 是否可以在 HTML 文件中调用 Go 方法?
- postman - Postman Websocket 测试 - 定期同时发送多个数据
- c# - 方法返回任务
但返回语句显示一个布尔值 - go - 使用 gRPC Web 进行 WebAssembly
- directshow - IGraphBuilder::AddSourceFilter 的奇怪工作
- html - 如何缩放图像映射?
- c - 如何将屏蔽位设置为指定的数字?
- docker - docker build --no-cshe 。未知标志:--no-cash
- python - Django rest 框架,¿解决错误的最佳方法是什么,“索引列表创建错误必须是整数或分块,而不是 str”。?