【问题标题】:In R selecting X first PCAs components in recipe in tidymodels在R中,在tidymodels的配方中选择X个第一个PCA组件
【发布时间】:2020-12-11 18:16:42
【问题描述】:

我想选择在配方中计算后的前 X 个 PCA 组件。然后我想将此配方添加到工作流程中。

请参阅下面的示例数据。

library(tidymodels)
x1 <- c(1, 6, 4, 2, 3, 4, 5, 7, 8, 2)
x2 <- c(1, 3, 4, 2, 3, 4, 5, 7, 8, 2)
x3 <- c(1, 3, 4, 2, 3, 4, 5, 7, 8, 2)
x4 <- c(1, 3, 4, 2, 3, 4, 5, 7, 8, 2)
id <- c(1:10)
y <- c(1, 4, 2, 5, 6, 2, 3, 6, 2, 4)
df1_train <- tibble(x1, x2,  x3,  x4, id, y)

step_PCA_PREPROCESSING = 4
selectXfirstPCA = 3

# My recipe
df1_train_recipe <- df1_train %>%
  recipes::recipe(y ~ .) %>%
  recipes::update_role(id, new_role = "id variable") %>%
  recipes::step_pca(., recipes::all_predictors(), num_comp = step_PCA_PREPROCESSING) %>% 
  recipes::update_role(tidyselect::num_range("PC", 1:selectXfirstPCA), new_role = "predictor")


# To then continue like below: 

# Model specifications
model_spec <- parsnip::linear_reg() %>% 
  parsnip::set_engine("glmnet") 

# Create workflow (to know variable roles from recipes)
df1_workflow <- workflows::workflow() %>%
  workflows::add_recipe(df1_train_recipe) %>%
  workflows::add_model(model_spec) 

# Fit model
mod <-  parsnip::fit(df1_workflow, data = df1_train)

【问题讨论】:

  • 为什么recipes::step_pca 中有., ?管道已经将配方转发到第一个插槽。

标签: r tidymodels r-recipes


【解决方案1】:

它只是step_pca() 中的num_comp 参数。根据文档,num_comp 是“作为新预测变量保留的 PCA 组件数。如果 num_comp 大于列数或可能组件数,将使用较小的值。”
因此,您的代码可以简单地为
recipes::step_pca(., recipes::all_predictors(), num_comp = selectXfirstPCA) 并删除最后的 update_role() 行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2015-08-19
    • 2012-02-25
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多