【发布时间】:2021-07-26 18:24:18
【问题描述】:
我已经使用 tidymodels 在 R 中训练和测试了一个随机森林模型。现在我想使用相同的模型来预测一个全新的数据集(不是训练数据集)。
例如 Julia silge,在这篇博文中解释了训练、测试和评估模型的步骤:Juliasilge's palmer penguins。我想将此模型应用于具有相同列的全新数据集(预测列(此处为性别)除外)
谁能帮我编写预测新数据集的代码。
我可以用示例数据集解释我尝试过的内容
library(palmerpenguins)
penguins <- penguins %>%
filter(!is.na(sex)) %>%
select(-year, -island)
#选择最适合的233行进行训练和测试
penguins_train_test<-penguins[1:233,]
#从父数据中拆分其他几行,并假设这是需要预测(而不是测试)的新数据集。因此,对于这个假设,我删除了名为“Sex”的列,需要通过拟合模型来预测(不是测试)
penguins_newdata<-penguins[233:333,-6]
set.seed(123)
penguin_split <- initial_split(penguins_train_test, strata = sex)
penguin_train <- training(penguin_split)
penguin_test <- testing(penguin_split)
创建模型规范。
rf_spec <- rand_forest() %>%
set_mode("classification") %>%
set_engine("ranger")
penguin_wf <- workflow() %>%
add_formula(sex ~ .)
应用于测试数据
penguin_final <- penguin_wf %>%
add_model(rf_spec) %>%
last_fit(penguin_split)
collect_metrics(penguin_final)
同样适用于新数据集“penguins_newdata”
penguins_newdata
penguin_wf %>%
add_model(rf_spec) %>%
fit(penguins_newdata)
我得到的结果是以下错误
Error: The following outcomes were not found in `data`: 'sex'.
我也试过这种方法
fit(penguin_wf, penguins_newdata)
这是我遇到的错误
Error: The workflow must have a model. Provide one with `add_model()`.
提前谢谢你。
【问题讨论】:
-
您需要在使用整个数据的工作流上使用
fit才能使用预测。见this -
但是您提供的链接给出了一个在现有(trining+ 测试)数据集 @missuse 上拟合模型的示例。我对我的新数据集(不用于训练和测试,但具有相同的列)采用了类似的方法。我得到了一个类似的错误: UseMethod("fit") 中的错误:没有适用于 'fit' 的方法应用于类 "c('last_fit', 'resample_results', 'tune_results', 'tbl_df', 'tbl' , 'data.frame')"
-
您是否浏览了链接中的整个示例?或者在问题中提供一个最小的可重现示例,我将尝试回答它。
-
@missuse ,我已经添加了示例数据集以及我尝试过的任何内容。提前致谢
标签: r random-forest predict tidymodels