如何利用Leaps包自动筛选最优子集列并生成新数据集?
自动提取leaps包最优特征子集并生成新数据集
步骤说明
- 从
regsubsets的摘要结果中提取变量选择逻辑矩阵,矩阵每行对应一个变量数量的最优子集,每列对应原数据特征,TRUE表示该特征被选入当前子集。 - 结合
which.min得到的最优子集变量数,定位到对应行,提取被选中的特征名。 - 用特征名直接从原数据中筛选列,生成新数据集。
完整代码示例
library(leaps) # 运行特征选择 mtcars.regsubsets <- regsubsets(mpg ~ ., data = mtcars) reg_summary <- summary(mtcars.regsubsets) # 确定最优子集的变量数量 best_n <- which.min(reg_summary$cp) # 提取最优子集对应的特征名 # 注:names(mtcars)[-1]去掉响应变量mpg;reg_summary$which[best_n, -1]去掉截距项列,取对应行的TRUE位置 best_vars <- names(mtcars)[-1][reg_summary$which[best_n, -1]] # 生成仅含最优特征的新数据集 mtcars_best_subset <- mtcars[, best_vars] # 查看结果 head(mtcars_best_subset)
代码解释
reg_summary$which是逻辑矩阵,行代表不同变量数量的子集,列包含截距项和所有特征。- 通过
reg_summary$which[best_n, -1]定位到最优子集的特征选择结果,匹配原数据的特征名后,直接索引原数据框即可自动生成目标数据集,无需手动填写列索引。
内容的提问来源于stack exchange,提问作者Russ Conte
相关产品推荐
相关产品推荐

