首页 > 解决方案 > 尝试使用 5 折拆分 df 进行交叉()得到“错误:`x` 必须是向量,而不是 `rsplit/vfold_split` 对象”

问题描述

我有一个看起来像这样的变量 train_cv:

> train_cv
#  5-fold cross-validation using stratification 
# A tibble: 5 x 4
  splits            id    train                   validate               
* <named list>      <chr> <named list>            <named list>           
1 <split [72K/18K]> Fold1 <df[,10] [72,000 × 10]> <df[,10] [18,001 × 10]>
2 <split [72K/18K]> Fold2 <df[,10] [72,001 × 10]> <df[,10] [18,000 × 10]>
3 <split [72K/18K]> Fold3 <df[,10] [72,001 × 10]> <df[,10] [18,000 × 10]>
4 <split [72K/18K]> Fold4 <df[,10] [72,001 × 10]> <df[,10] [18,000 × 10]>
5 <split [72K/18K]> Fold5 <df[,10] [72,001 × 10]> <df[,10] [18,000 × 10]>
> glimpse(train_cv)
Observations: 5
Variables: 4
$ splits   <named list> [<rsplit[72000 x 18001 x 90001 x 10]>, <rsplit[72001 x 18000 x 90001 x 10]>, <rsplit[72001 x 18000 x 90001 x 10]>, <rsplit[72001 x 18000 x 90001 x 10]>, <rsplit[72001 x 18000 x 90001 x 10]>]
$ id       <chr> "Fold1", "Fold2", "Fold3", "Fold4", "Fold5"
$ train    <named list> [<data.frame[72000 x 10]>, <data.frame[72001 x 10]>, <data.frame[72001 x 10]>, <data.frame[72001 x 10]>, <data.frame[72001 x 10]>]
$ validate <named list> [<data.frame[18001 x 10]>, <data.frame[18000 x 10]>, <data.frame[18000 x 10]>, <data.frame[18000 x 10]>, <data.frame[18000 x 10]>]

我试图crossing()用一些 mtry 参数来交叉每个折叠:

> model_ranger <- train_cv %>% 
+   
+   crossing(mtry = c(1,2,4,8))
Error: `x` must be a vector, not a `rsplit/vfold_split` object

我从一个做这件事的在线课程中复制了这个,使用交叉在一个数据帧上,该数据帧使用rsample::vfold_cv(). 除了我看到这个错误信息。

为什么会出现此错误,如何将 5 个 cv 折叠中的每一个与mtry = c(1,2,4,8)

标签: rtidyr

解决方案


我试过了,它奏效了:

model_ranger <- train_cv %>% expand_grid(mtry = c(1,2,4,8))

推荐阅读