使用glmnet交叉验证预测

时间:2017-06-29 14:13:17

标签: cross-validation glmnet

有没有人知道glmnet是否会产生交叉验证的预测,即基于模型构建中遗漏的折叠的预测(人们通常认为是交叉验证的),而不是交叉验证的预测,所有预测均来自同一预测基于通过交叉验证建立的最优lambda的模型?

1 个答案:

答案 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