【发布时间】:2022-11-21 19:49:28
【问题描述】:
我有以下预测模型:
library(tidymodels)
data(ames)
set.seed(4595)
data_split <- initial_split(ames, strata = "Sale_Price", prop = 0.75)
ames_train <- training(data_split)
ames_test <- testing(data_split)
rec <- recipe(Sale_Price ~ ., data = ames_train)
norm_trans <- rec %>%
step_zv(all_predictors()) %>%
step_nzv(all_predictors()) %>%
step_corr(all_numeric_predictors(), threshold = 0.1)
# Preprocessing
norm_obj <- prep(norm_trans, training = ames_train)
rf_ames_train <- bake(norm_obj, ames_train) %>%
dplyr::select(Sale_Price, everything()) %>%
as.data.frame()
dim(rf_ames_train )
rf_xy_fit <- rand_forest(mode = "regression") %>%
set_engine("ranger") %>%
fit_xy(
x = rf_ames_train,
y = log10(rf_ames_train$Sale_Price)
)
请注意,在预处理步骤之后,特征数量从 74 减少到 33。
dim(rf_ames_train )
# 33
目前,我必须在函数中显式传递预测变量:
preds <- colnames(rf_ames_train)
my_pred_function <- function (fit = NULL, test_data = NULL, predictors = NULL) {
test_results <- test_data %>%
select(Sale_Price) %>%
mutate(Sale_Price = log10(Sale_Price)) %>%
bind_cols(
predict(fit, new_data = ames_test[, predictors])
)
test_results
}
my_pred_function(fit = rf_xy_fit, test_data = ames_test, predictors = preds)
在上面的函数调用中显示为predictors = preds。
实际上,我必须将rf_xy_fit和preds保存为两个RDS文件,然后再读取它们。这样容易出错,也很麻烦。
我想绕过这个明确的传递。有什么方法可以直接从rf_xy_fit 中提取吗?
【问题讨论】:
标签: r tidymodels r-recipes r-ranger parsnip