如何解决使用相同的 alpha/lambda 参数从 caret 和 cv.glmnet 获得不同的 AUC 估计
我正在使用 5 倍 CV 来查找岭回归的调整参数,同时尝试了 caret 和 cv.glmnet。我想使用 caret 包,因为它具有用于重复简历的内置例程。然而,单独尝试 5 倍 CV,我得到的准确度估计值非常不同:
请注意,我的数据集有 605 个观测值(150 1、455 0)和 26 个预测变量(连续/分类的混合)。
使用插入符号:
tr.control <- trainControl(method = "cv",number = 5)
param.control<-expand.grid(alpha = 0,lambda=seq(0.01,1,0.001))
glm.mod = train(caco ~ .,data=df.train,method='glmnet',trControl=tr.control,tuneGrid=param.control)
glm.mod$resample
Accuracy Kappa Resample
1 0.7520661 0.00000000 Fold1
2 0.7438017 0.01626016 Fold3
3 0.7603306 0.04930913 Fold5
4 0.7603306 0.04930913 Fold4
5 0.7603306 0.04930913 Fold2
glm.mod$bestTune
alpha lambda
212 0 0.221
使用 cv.glmnet:
x.m <- model.matrix( ~ .,data=df.train[,c(-44)])
y.m<-as.numeric(as.matrix(df.train[,c(44)]))
ridge<-cv.glmnet(x=x.m,y=y.m,alpha=0,family="binomial",type.measure = "auc",standarize=TRUE,0.001))
ridge
Call: cv.glmnet(x = x.m,y = y.m,lambda = seq(0.01,0.001),alpha = 0,family = "binomial",standarize = TRUE)
Measure: AUC
Lambda Index Measure SE Nonzero
min 0.313 188 0.6573 0.02711 43
1se 0.500 1 0.6562 0.02802 43
据我所知,caret 的结果似乎并不可靠。 kappa 值较低,折叠 1 的准确度为 455/605 = 0.7520。就其价值而言,cv.glmnet 准确度低于我的预期,这是基于该数据的 AUROC 与传统逻辑回归拟合 (~0.75)。
我的主要问题是,插入符号与 glmnet 计算中可能发生了什么导致结果如此不同? lambda 值似乎没有太大区别,尽管我可能应该增加 cv.glmnet lambda 序列。我知道这些折叠中的每一个都会有所不同,但准确度估计似乎差异太大,因此不能作为唯一的解释。
如果 cv.glmnet 给出“正确”的结果,为什么插入符号会失败?为了实现重复的 CV,我是否可以简单地遍历 cv.glmnet 的迭代并平均得到的 AUC?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。