如何使用Nest和mutate从训练集创建模型,然后将其应用于R中的测试数据(tidymodels)


library(tidymodels)
Train %>% nest(-Groups) %>% 
mutate(fit=map(data,~lm(X~Y+Z,x=.)),
augmented = map(fit,augment),
predict = map2(fit,Y,Z)) %>%
unnest(augmented) %>% select(-data)

这对于Train数据非常有效。我可以通过使用不同的扫把功能,如glance或augment,来获得合适的模型摘要等。每个小组都有自己的模型,这是我想要的。

挑战是当我想在测试数据上使用这个模型时。

似乎直截了当,但不知何故,解决方案逃避我:(

当您适合这样嵌套的数据时,您最终会得到许多模型,而不仅仅是一个,因此您还需要设置自己在上预测许多模型

library(tidyverse)
library(broom)
data(Orange)
Orange <- as_tibble(Orange)
orange_fit <- Orange %>% 
nest(data = c(-Tree)) %>%    ## this sets up five separate models
mutate(
fit = map(data, ~ lm(age ~ circumference, data = .x))
) 
## the "test data" here is `circumference = c(50, 100, 150)`
orange_fit %>%
select(Tree, fit) %>%
crossing(circumference = c(50, 100, 150)) %>%
mutate(new_data = map(circumference, ~tibble(circumference = .)),
predicted_age = map2_dbl(fit, new_data, predict))
#> # A tibble: 15 x 5
#>    Tree  fit    circumference new_data         predicted_age
#>    <ord> <list>         <dbl> <list>                   <dbl>
#>  1 3     <lm>              50 <tibble [1 × 1]>          392.
#>  2 3     <lm>             100 <tibble [1 × 1]>          994.
#>  3 3     <lm>             150 <tibble [1 × 1]>         1596.
#>  4 1     <lm>              50 <tibble [1 × 1]>          331.
#>  5 1     <lm>             100 <tibble [1 × 1]>          927.
#>  6 1     <lm>             150 <tibble [1 × 1]>         1523.
#>  7 5     <lm>              50 <tibble [1 × 1]>          385.
#>  8 5     <lm>             100 <tibble [1 × 1]>          824.
#>  9 5     <lm>             150 <tibble [1 × 1]>         1264.
#> 10 2     <lm>              50 <tibble [1 × 1]>          257.
#> 11 2     <lm>             100 <tibble [1 × 1]>          647.
#> 12 2     <lm>             150 <tibble [1 × 1]>         1037.
#> 13 4     <lm>              50 <tibble [1 × 1]>          282.
#> 14 4     <lm>             100 <tibble [1 × 1]>          640.
#> 15 4     <lm>             150 <tibble [1 × 1]>          999.

由reprex包(v0.3.0)在2021-01-25创建

注意,最后我们对每个模型(5)的测试集(3)中的每个点进行了预测。

相关内容

  • 没有找到相关文章

最新更新