【发布时间】:2020-10-03 18:21:04
【问题描述】:
我正在尝试将 tidy 模型 PCA 合并到模型的工作流程中。我想要一个使用 PCA 作为预处理步骤的预测模型,然后使用该模型进行预测。
我尝试了以下方法,
diamonds <- diamonds %>%
select(-clarity, -cut, - color)
diamonds_split <- initial_split(diamonds, prop = 4/5)
diamonds_train <- training(diamonds_split)
diamonds_test <- testing(diamonds_split)
diamonds_test <-vfold_cv(diamonds_train)
diamonds_recipe <-
# La fórmula básica y todos los datos (outcome ~ predictors)
recipe(price ~ ., data = diamonds_train) %>%
step_log(all_outcomes(),skip = T) %>%
step_normalize(all_predictors(), -all_nominal()) %>%
step_pca(all_predictors())
preprocesados <- prep(diamonds_recipe)
linear_model <-
linear_reg() %>%
set_engine("glmnet") %>%
set_mode("regression")
pca_workflow <- workflow() %>%
add_recipe(diamonds_recipe) %>%
add_model(linear_model)
lr_fitted_workflow <- pca_workflow %>% #option A workflow full dataset
last_fit(diamonds_split)
performance <- lr_fitted_workflow %>% collect_metrics()
test_predictions <- lr_fitted_workflow %>% collect_predictions()
但我收到此错误:
x Resample1:模型(预测):错误:penalty 应该是单个数值。 ...
警告信息:
“所有模型在 [fit_resamples()] 中都失败了。请参阅.notes 列。”
按照其他教程,我尝试使用这种其他方法,但我不知道如何使用该模型进行新的预测,因为新数据以原始(非 pca)形式出现。所以我尝试了这个:
pca_fit <- juice(preprocesados) %>% #option C no work flow at all
lm(price ~ ., data = .)
prep_test <- prep(diamonds_recipe, new_data = diamonds_test)
truths <- juice(prep_test) %>%
select(price)
ans <- predict(pca_fit, new_data = prep_test)
tib <- tibble(row = 1:length(ans),ans, truths)
ggplot(data = tib) +
geom_smooth(mapping = aes(x = row, y = ans, colour = "predicted")) +
geom_smooth(mapping = aes(x = row, y = price, colour = "true"))
它打印的东西看起来很合理,但到现在我已经失去了信心,非常感谢一些指导。 :D
【问题讨论】:
标签: r pca prediction tidymodels