gpt4 book ai didi

r - 如何将经过训练和测试的随机森林模型应用于 tidymodels 中的新数据集?

转载 作者:行者123 更新时间:2023-12-05 09:33:10 25 4
gpt4 key购买 nike

我使用 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,]

#从父数据中拆分其他几行,并假设这是需要预测(而不是测试)的新数据集。因此对于这个假设,我删除了名为“性别”的列,这需要通过拟合模型(而不是测试)来预测

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()`.

提前谢谢你。

最佳答案

您的代码中的问题是您正在尝试将最终模型拟合到缺少目标变量 sex 的新数据上,这就是错误告诉您的内容。

Error: The following outcomes were not found in `data`: 'sex'.

毕竟你的工作流程有以下行 add_formula(sex ~ .) %>%

library(tidyverse)
library(palmerpenguins)
library(tidymodels)

对训练和测试数据进行预处理和分割

penguins <- penguins %>%
filter(!is.na(sex)) %>%
select(-year, -island)

penguins_train_test <- penguins[1:233,]
penguins_newdata <- penguins[233:333,-6]

定义工作流

rf_spec <- rand_forest() %>%
set_mode("classification") %>%
set_engine("ranger")

penguin_wf <- workflow() %>%
add_formula(sex ~ .) %>%
add_model(rf_spec) %>%

使用工作流在训练数据上拟合模型

penguin_wf %>%      
fit(penguins_train_test) -> model

使用模型预测新数据

predict(model, penguins_newdata)

输出

# A tibble: 101 x 1
.pred_class
<fct>
1 female
2 male
3 male
4 male
5 female
6 male
7 female
8 male
9 male
10 female
# ... with 91 more rows

这里没有进行调整,模型是用默认参数制作的。当您通过某种重采样调整超参数时,您可以按照我从您的问题中收集到的方式进行调整,您可以从特定指标上最好的调整结果中提取它们

param_final <- rf_tune_results %>%
select_best(metric = "auc")

并在工作流中设置它们

rf_workflow <- rf_workflow %>%
finalize_workflow(param_final)

这样,当您在训练数据上拟合模型时,将使用最佳超参数。

其他详细信息在 link I posted in the comment 中给出.

关于r - 如何将经过训练和测试的随机森林模型应用于 tidymodels 中的新数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67384206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com