gpt4 book ai didi

R Tidymodels : What objects to save for use in production after fitting a recipe-based workflow utilizing pre-processing?

转载 作者:行者123 更新时间:2023-12-04 14:09:00 27 4
gpt4 key购买 nike

设计后Tidymodels基于配方的工作流程,经过调整然后适合一些训练数据,我不清楚应该将哪些对象(适合的“工作流程”、“配方”等)保存到磁盘以用于预测生产中的新数据 .我知道我可以使用 saveRDS()/readRDS() , write_rds()/read_rds() ,或其他选项来实际保存/加载这些对象,但哪些 ?
在干净的 R 环境中,我将收到传入的新原始数据,这些数据需要使用我在训练模型时使用的“配方”进行预处理。然后,我想根据预处理后的数据进行预测。如果我打算使用 prep()bake()函数来像我处理训练数据一样预处理新数据,然后我将最少需要它似乎得到的配方和原始训练数据 prep()上类。另外,我还需要拟合模型/工作流程来进行预测。所以三个对象似乎。如果我将 SESSION 1 中的工作流对象保存到磁盘,那么我可以在 SESSION 2 中使用 pull_workflow_prepped_recipe() 从中提取配方和模型。和 pull_workflow_fit()分别。但是prep()似乎需要原始训练数据,我可以通过早期使用 retain = TRUE 将其保留在工作流程中...但是在调用 fit() 后,它会被从工作流程中剥离出来.听到我的呼救声! :)
所以,想象一下两个不同的 R session ,其中第一个 session 我正在做所有的训练和模型构建,第二个 session 是一些运行的生产应用程序,它使用从第一个 session 中学到的东西。我需要 SESSION1 底部箭头和 SESSION 2 中多个位置的帮助。我使用了 Tidymodels Get Started作为这个例子的基础。
第 1 节

library(tidymodels)
library(nycflights13)
library(readr)
set.seed(123)
flight_data <-
head(flights, 500) %>%
mutate(
arr_delay = ifelse(arr_delay >= 30, "late", "on_time"),
arr_delay = factor(arr_delay),
date = as.Date(time_hour)
) %>%
inner_join(weather, by = c("origin", "time_hour")) %>%
select(dep_time, flight, origin, dest, air_time, distance, carrier, date, arr_delay, time_hour) %>%
na.omit() %>%
mutate_if(is.character, as.factor)

set.seed(555)
data_split <- initial_split(flight_data, prop = 3/4)
train_data <- training(data_split)
test_data <- testing(data_split)

flights_rec <-
recipe(arr_delay ~ ., data = train_data) %>%
update_role(flight, time_hour, new_role = "ID") %>%
step_date(date, features = c("dow", "month")) %>%
step_holiday(date, holidays = timeDate::listHolidays("US")) %>%
step_rm(date) %>%
step_dummy(all_nominal(), -all_outcomes()) %>%
step_zv(all_predictors())

lr_mod <-
logistic_reg() %>%
set_engine("glm")

flights_wflow <-
workflow() %>%
add_model(lr_mod) %>%
add_recipe(flights_rec)

flights_fit <-
flights_wflow %>%
fit(data = train_data)

predict(flights_fit, test_data)

### SAVE ONE OR MORE OBJECTS HERE FOR NEXT SESSION <------------
# What to save? workflow (pre or post fit()?), recipe, training data...etc.
write_rds(flights_wflow, "flights_wflow.rds") # Not fitted workflow
write_rds(flights_fit, "flights_fit.rds") # Fitted workflow
第二节
### READ ONE OR MORE OBJECTS HERE FROM PRIOR SESSION <------------
flights_wflow <- read_rds("flights_wflow.rds")
flights_fit <- read_rds("flights_fit.rds")

# Acquire new data, do some basic transforms as before
new_flight_data <-
tail(flights, 500) %>%
mutate(
arr_delay = ifelse(arr_delay >= 30, "late", "on_time"),
arr_delay = factor(arr_delay),
date = as.Date(time_hour)
) %>%
inner_join(weather, by = c("origin", "time_hour")) %>%
select(dep_time, flight, origin, dest, air_time, distance, carrier, date, arr_delay, time_hour) %>%
na.omit() %>%
mutate_if(is.character, as.factor)

# Something here to preprocess the data with recipe as in SESSION 1 <----------
# new_flight_data_prep <- prep(??)
# new_flight_data_preprocessed <- bake(??)

# Predict new data
predict(flights_fit, new_data = new_flight_data_preprocessed)

最佳答案

根据您的限制,您可以灵活地处理此问题,但通常我会建议保存/序列化 拟合工作流程 ,也许在 using butcher to reduce its size 之后.你可以看到an example model fitting script in this repo最后显示了我如何保存拟合的工作流程。
当您使用此工作流程进行预测时,需要记住一些事项。我有 an example Plumber API在同一个 repo 中,演示了对该特定工作流程进行预测所需的内容。请注意,如何为该 API 加载/附加预测所需的包。我没有使用所有的 tidymodels,而是只使用了 具体包我需要更好的性能和更小的容器。

关于R Tidymodels : What objects to save for use in production after fitting a recipe-based workflow utilizing pre-processing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66018457/

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