【问题标题】:k-fold cross validation - how to get the prediction automatically?k折交叉验证 - 如何自动获得预测?
【发布时间】:2013-08-28 19:30:08
【问题描述】:

这可能是一个愚蠢的问题,但我只是找不到一个包来做到这一点......我知道我可以编写一些代码来获得我想要的东西,但如果有一个自动执行它的功能会很好!

所以基本上我想对 glm 模型进行 k 折交叉验证。我想自动获得每个验证集的预测和实际值。因此,如果我正在做一个 10 倍的 CV,我想要一个函数来返回 10 个验证集以及实际响应和预测。

提前谢谢你!

【问题讨论】:

  • 你试过 caret 包吗?

标签: r cross-validation


【解决方案1】:

正如 cmets 中所述,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

【讨论】:

  • 错过了您想查看每个折叠的结果,只需将savePred=T 选项添加到您的trainControl 选项,它们将位于模型对象的pred 字段中。
  • 谢谢!这很有帮助。
  • 一个问题:我想拟合一个速率模型(带偏移量的泊松模型)我使用 glm 的原始模型和我使用你的代码的模型(训练函数然后 fit$finalModel)非常不同.知道为什么吗?我不确定“火车”功能是否可以处理各种 glm
  • 我假设您想要逻辑回归(因此是我的示例),我编辑了我的帖子以显示带有泊松链接的示例。
  • 是的,这正是我所做的......但如果我只是使用 glm 拟合整个数据集,模型就会与模型大不相同。可能是因为偏移。
【解决方案2】:

我建议从 boot 包中调查 cv.glm,因为您正在使用 glm 模型。另一种选择是包cvTools。不过,我发现为 CV 编写自己的函数更有用。听起来你想要一个中途结束的 CV 函数,而我见过的大多数 CV 函数都会对所有验证集的预测误差进行平均,并只返回平均值(当然,这是交叉验证的定义)。

【讨论】:

  • 知道如何使用 cv.glm 保存预测吗?自己写有点麻烦,尤其是我想做一份遗漏简历...
  • 我自己写了代码。我有一个包含 4000 条记录的样本。做一个离开需要很长时间......谁知道更有效的方法..?
猜你喜欢
  • 2018-03-20
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 2016-12-15
  • 2018-08-29
  • 2017-06-09
  • 2017-07-02
相关资源
最近更新 更多