有没有人知道glmnet是否会产生交叉验证的预测,即基于模型构建中遗漏的折叠的预测(人们通常认为是交叉验证的),而不是交叉验证的预测,所有预测均来自同一预测基于通过交叉验证建立的最优lambda的模型?
答案 0 :(得分:2)
predict.cv.glmnet
只是将所有数据的“glmnet”传递给predict.glmnet
,因为您怀疑。
但是,参数 keep 会根据左侧数据集返回训练数据(拟合值)的预测值。分配给每个记录的折叠记录为元素 foldid 。
> library(glmnet)
> # keep prevalidated array
> cvf1 <- cv.glmnet(x = as.matrix(mtcars[, c("disp", "hp", "mpg")]),
+ y = mtcars$am, family = "binomial", keep = TRUE)
> dim(mtcars)
# [1] 32 11
> length(cvf1$lambda)
# [1] 84
> # leave-n out fitted predictions
> # 84 columns, 2 columns padded with NAs
> dim(cvf1$fit.preval)
# [1] 32 86
> # performance of cross-validated model predictions
> round(mtcars$am - cvf1$fit.preval[, cvf1$lambda == cvf1$lambda.min])
# [1] 1 1 0 0 0 0 0 0 -1 0 0 0 0 0 0
# [16] 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0
# [31] 0 0
> cvf1$foldid
# [1] 1 6 6 1 1 8 9 6 2 5 9 4 4 2 2
# [16] 10 5 2 3 4 10 3 1 3 10 9 7 8 7 8
# [31] 7 5