【发布时间】:2021-04-25 02:56:33
【问题描述】:
我想使用 caret::train 计算具有最佳 alpha 和 lambda 的弹性网络回归模型的 10 倍交叉验证 AUC
https://stats.stackexchange.com/questions/69638/does-caret-train-function-for-glmnet-cross-validate-for-both-alpha-and-lambda/69651 解释了如何使用caret::train 交叉验证 alpha 和 lambda
我关于 Cross Validated 的问题已结束,因为它已被归类为编程问题:https://stats.stackexchange.com/questions/505865/r-calculate-the-10-fold-crossvalidated-auc-with-glmnet-and-given-alpha-and-lamb?noredirect=1#comment934491_505865
我有什么
数据集:
library(tidyverse)
library(caret)
library(glmnet)
library(mlbench)
# example data
data(PimaIndiansDiabetes, package="mlbench")
# make a training set
set.seed(2323)
train.data <- PimaIndiansDiabetes
我的模特:
# build a model using the training set
set.seed(2323)
model <- train(
diabetes ~., data = train.data, method = "glmnet",
trControl = trainControl("cv",
number = 10,
classProbs = TRUE,
savePredictions = TRUE),
tuneLength = 10,
metric="ROC"
)
这里我得到了错误:
Warning message:
In train.default(x, y, weights = w, ...) :
The metric "ROC" was not in the result set. Accuracy will be used instead.
如果我忽略错误,最好的 alpha 和 lambda 将是:
model$bestTune
alpha lambda
11 0.2 0.002926378
现在我想使用具有最佳 alpha 和 lambda 以及训练数据的模型获得 10 倍交叉验证的 AUC。
我尝试了什么
我的方法是这样的,但是,我得到了错误:Something is wrong; all the Accuracy metric values are missing:
model <- train(
diabetes ~., data = train.data, method = "glmnet",
trControl = trainControl("cv",
number = 10,
classProbs = TRUE,
savePredictions = TRUE),
alpha=model$bestTune$alpha,
lambda=model$bestTune$lambda,
tuneLength = 10,
metric="ROC"
)
如何使用最佳 alpha 和 lambda 以及训练数据计算交叉验证的 AUC?
我仍然不确定如何交叉验证 AUC 而不是准确性。
感谢您的帮助。
【问题讨论】:
-
如果从最后一段代码中删除
tuneLength = 10会发生什么? -
谢谢。如果我删除它,我会收到警告消息:
1: In train.default(x, y, weights = w, ...) : The metric "ROC" was not in the result set. Accuracy will be used instead. 2: model fit failed for Fold01: alpha=0.10, lambda=0.04967 Error in (function (x, y, family = c("gaussian", "binomial", "poisson", : formal argument "alpha" matched by multiple actual arguments -
设置
tuneGrid = data.frame(alpha = model$bestTune$alpha, lambda = model$bestTune$lambda),而不是tuneLength。但是这不是必需的,因为这些参数的 AUC 已经包含在您调整 alpha 和 lambda 的第一个调用中 - 请参阅model$results。 -
谢谢。我误解了。我没有意识到,如果我针对 alpha 和 lambda 进行调整,并且如果我使用固定的 alpha 和 lambda 进行交叉验证,我实际上会得到相同的结果。最后一个问题,我刚刚意识到我选择的是准确度而不是 ROC 的最佳模型,因为我实际上打算这样做。我能以某种方式解决这个问题吗?
标签: r logistic-regression cross-validation r-caret roc