这可能是一个愚蠢的问题,但我只是找不到一个包来做到这一点......我知道我可以编写一些代码来获得我想要的东西,但如果有一个自动执行它的功能会很好!
所以基本上我想对 glm 模型进行 k 折交叉验证。我想自动获得每个验证集的预测和实际值。因此,如果我正在做一个 10 倍的 CV,我想要一个函数来返回 10 个验证集以及实际响应和预测。
先感谢您!
这可能是一个愚蠢的问题,但我只是找不到一个包来做到这一点......我知道我可以编写一些代码来获得我想要的东西,但如果有一个自动执行它的功能会很好!
所以基本上我想对 glm 模型进行 k 折交叉验证。我想自动获得每个验证集的预测和实际值。因此,如果我正在做一个 10 倍的 CV,我想要一个函数来返回 10 个验证集以及实际响应和预测。
先感谢您!
如评论中所述,caret
使交叉验证非常容易。只需使用“glm”方法,如下所示:
> library(caret)
> set.seed(2)
> dat <- data.frame(label=round(runif(100,0,5)),v1=rnorm(100),v2=rnorm(100))
> tc <- trainControl("cv",10,savePred=T)
> (fit <- train(label~.,data=dat,method="glm",trControl=tc,family=poisson(link = "log")))
100 samples
2 predictors
No pre-processing
Resampling: Cross-Validation (10 fold)
Summary of sample sizes: 90, 91, 91, 90, 90, 89, ...
Resampling results
RMSE Rsquared RMSE SD Rsquared SD
1.53 0.146 0.131 0.235
> fit$finalModel$family
Family: poisson
Link function: log
> head(fit$pred)
pred obs rowIndex .parameter Resample
1 2.684367 1 1 none Fold01
2 2.165246 1 18 none Fold01
3 2.716165 3 35 none Fold01
4 2.514789 3 36 none Fold01
5 2.249137 5 47 none Fold01
6 2.328514 2 48 none Fold01
我建议cv.glm
从 package进行调查boot
,因为您正在使用 glm 模型。另一种选择是 package cvTools
。不过,我发现为 CV 编写自己的函数更有用。听起来您想要一个中途结束的 CV 函数,而我见过的大多数 CV 函数将平均所有验证集的预测误差并仅返回平均值(当然,这是交叉验证的定义)。