如何用tidymodels提取类glmnet格式的PLSR系数?
从tidymodels的mixOmics引擎PLSR模型提取glmnet格式的整体系数
我用tidymodels调优了glmnet回归模型,能成功提取出系数,但用同样方法处理mixOmics引擎的PLSR模型时,得到的是每个项对应各个组件的单独值。因为后续外部使用需要,我需要glmnet格式的PLSR整体系数。
目前我可以通过pls包的plsr()函数结合coef()提取目标系数,但这个方法没法传入predictor_prop这类参数,可能导致结果偏差,所以想找更优雅的提取方式,或者从组件值计算得到目标系数。
library(tidymodels) library(plsmod) data(Chicago) Chicago <- Chicago %>% select(ridership, Clark_Lake, Austin, Harlem) # 创建交叉验证数据集 folds <- vfold_cv(Chicago) # 创建预处理配方 rec <- recipe(ridership ~ ., Chicago) %>% step_normalize(all_predictors()) %>% prep(training = Chicago) # 定义PLSR模型 mod <- parsnip::pls(mode = "regression", num_comp = tune(), predictor_prop = tune()) %>% set_engine("mixOmics") # 构建工作流 wf <- workflow() %>% add_recipe(rec) %>% add_model(mod) # 运行网格调优 set.seed(123) res <- tune_grid(wf, resamples = folds, grid = 5) # 筛选最优模型参数 res_best <- res %>% select_best("rmse") # 拟合最优模型并提取组件对应值 wf %>% finalize_workflow(res_best) %>% fit(Chicago) %>% extract_fit_parsnip() %>% tidy() # 使用pls包提取整体系数作为参考 p <- pls::plsr(ridership ~ ., data = Chicago, scale = T, center = T, ncomp = 3) coef(p, intercept = T)
内容的提问来源于stack exchange,提问作者borri
相关产品推荐
相关产品推荐

