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

使用leaps包regsubsets做前向逐步选择时因子变量拆分问题如何解决

解决regsubsets因子变量按整体参与特征选择的方案

首先明确:leaps包的regsubsets函数默认会对分类因子做哑变量编码,将每个因子水平拆为独立的二元特征单独筛选,原生不支持直接将因子作为整体纳入/排除的逻辑,你观察到的拆分是函数默认行为,和ungroup操作无关。要实现因子级别的整体选择,可以按以下方案操作:

方案1:改用支持因子整体选择的专门包

优先换用更适配因子级特征选择的工具,避免手动修改逻辑:

  • 使用bestglm包:该包封装了leaps的底层计算逻辑,原生支持分类任务(包括逻辑回归)的因子整体选择,只要输入的数据集保持因子类型,开启对应参数后函数会自动将所有因子的所有水平绑定为一个整体,选择时会同时纳入/排除同一个因子的所有哑变量。
    示例代码片段:
    library(bestglm)
    # 构造输入数据框:要求最后一列是目标变量
    input_df <- your_df[, c(setdiff(colnames(your_df), "Revenue"), "Revenue")]
    # 执行因子整体的前向逐步选择,family指定二分类逻辑回归
    res <- bestglm(Xy = input_df, family = binomial, method = "forward", factor.full = TRUE)
    # 查看最优特征集结果
    res$BestModel
    
  • 若一定要保留leaps依赖,可配合regsubsets的force.in参数实现:先提取所有因子变量对应的哑变量列索引,建立因子和对应哑变量的映射关系,遍历因子组合时如果要纳入某因子,就把该因子对应的所有哑变量索引都加入force.in列表,最终按AIC/BIC筛选最优集合即可。

方案2:手动封装regsubsets的筛选逻辑

如果不想更换依赖,可以手动加过滤规则实现约束:

  1. 预处理数据集,统计每个因子对应的哑变量列名/索引,建立因子与对应哑变量的映射表
  2. 运行默认的regsubsets得到所有候选特征集的运行结果
  3. 过滤结果:仅保留满足「同一个因子的所有哑变量要么全部入选、要么全部不入选」的特征集
  4. 对过滤后的有效特征集计算AIC、BIC等评估指标,选择最优组合

补充说明

你之前观察到的「Region因子未拆分、其他因子拆分」的差异,是因为Region的因子水平数为2,默认哑变量编码后仅生成1个哑变量,看起来和原变量行为一致,本质还是被拆分处理了,和ungroup操作没有关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:27:02