You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在tidymodels(R)中用CRAN包实现可推断的特征选择

在tidymodels中用CRAN包实现可推断的逻辑回归特征选择

因为正则化模型无法直接提供参数置信区间,你可以通过先筛选特征,再拟合普通逻辑回归的方式满足需求,以下是几种基于CRAN包的可行方案:

方案1:用recipes包的逐步特征选择(基于AIC/BIC)

recipes是tidymodels核心CRAN包,内置了基于信息准则的逐步选择工具,筛选后拟合普通逻辑回归即可进行推断。

步骤示例:

  1. 加载所需包
library(tidymodels)
tidymodels_prefer()
  1. 数据准备(以内置attrition数据集为例)
data(attrition, package = "modeldata")
set.seed(123)
attr_split <- initial_split(attrition, strata = Attrition)
attr_train <- training(attr_split)
attr_test <- testing(attr_split)
  1. 创建包含逐步选择的预处理配方
    这里用向后逐步选择,基于AIC筛选与Attrition相关的特征:
attr_rec <- recipe(Attrition ~ ., data = attr_train) %>%
  step_dummy(all_nominal_predictors(), -all_outcomes()) %>%
  step_naomit(all_predictors()) %>%
  step_backward(
    Attrition ~ .,
    direction = "backward",
    trace = FALSE,
    metric = "AIC",
    model = logistic_reg() %>% set_engine("glm")
  )
  1. 定义支持推断的普通逻辑回归模型
logit_spec <- logistic_reg() %>%
  set_engine("glm") %>%
  set_mode("classification")
  1. 创建工作流并拟合
logit_wf <- workflow() %>%
  add_recipe(attr_rec) %>%
  add_model(logit_spec)

logit_fit <- fit(logit_wf, data = attr_train)
  1. 获取参数置信区间
tidy(logit_fit, conf.int = TRUE)

方案2:整合MASS包的stepAIC(经典逐步选择)

MASS是CRAN经典统计包,其stepAIC函数支持基于AIC的逐步选择,可通过tidymodels接口整合使用。

步骤示例:

  1. 加载MASS包
library(MASS)
  1. 拟合全模型并执行逐步选择
# 先拟合全量特征的逻辑回归
full_fit <- fit(logit_spec, Attrition ~ ., data = attr_train)
# 用stepAIC进行双向逐步选择
step_fit <- stepAIC(full_fit$fit, direction = "both", trace = FALSE)
  1. 输出带置信区间的参数结果
tidy(step_fit, conf.int = TRUE)

方案3:基于特征重要性的筛选(结合vip包)

vip是CRAN包,可提取模型特征重要性,筛选高重要性特征后重新拟合普通逻辑回归。

步骤示例:

  1. 加载vip包
library(vip)
  1. 拟合全模型并提取特征重要性
full_logit_fit <- fit(logit_spec, Attrition ~ ., data = attr_train)
# 查看特征重要性排序
imp_scores <- vi(full_logit_fit) %>% arrange(desc(Importance))
  1. 筛选特征并重新拟合
    比如选择重要性前10的特征:
top_features <- imp_scores$Variable[1:10]

# 创建仅包含高重要性特征的配方
top_rec <- recipe(Attrition ~ ., data = attr_train) %>%
  step_dummy(all_nominal_predictors(), -all_outcomes()) %>%
  step_naomit(all_predictors()) %>%
  step_select(all_of(top_features), Attrition)

# 重新拟合模型并获取置信区间
top_logit_fit <- workflow() %>%
  add_recipe(top_rec) %>%
  add_model(logit_spec) %>%
  fit(data = attr_train)

tidy(top_logit_fit, conf.int = TRUE)

注意事项

  • 所有方案最终都拟合了未正则化的逻辑回归模型,因此可正常计算参数置信区间并进行统计推断。
  • 逐步选择存在过拟合风险,建议结合交叉验证(如fit_resamples())验证模型泛化性能。

内容的提问来源于stack exchange,提问作者Aegis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:33:33