penalized logistic regression(glmnet)特征选择及重要性提取方法问询
惩罚逻辑回归(GLMNET)的特征筛选与重要性提取说明
1. 是否会自动筛选预测变量
会。当你使用的惩罚项包含L1正则(即Lasso,对应参数alpha>0,alpha=1为纯Lasso)时,模型训练过程中会自动将无关特征的系数压缩为0,只有系数不为0的特征会真正参与预测,相当于完成了自动特征筛选。如果使用的是纯L2正则(Ridge,alpha=0)则不会做特征筛选,所有特征都会保留,仅系数被缩小。
2. 如何确定被选中的特征
你可以直接从训练完成的模型中提取系数,过滤系数不为0的项即可,tidymodels生态下的操作示例如下:
# 加载必要包 library(tidymodels) # 假设你已经完成训练的workflow对象名为 fitted_glmnet_wf # 提取拟合好的模型对象 glmnet_model <- extract_fit_parsnip(fitted_glmnet_wf) # 提取系数,过滤截距和系数为0的项,得到所有被选中的特征 selected_features <- tidy(glmnet_model) %>% filter(term != "(Intercept)", estimate != 0)
返回结果的term列就是所有被筛选进入模型的特征。
3. 如何提取特征重要性
惩罚逻辑回归的特征重要性默认基于标准化后特征的系数绝对值计算:系数绝对值越大,特征对预测结果的影响程度越高,重要性也就越高。
你可以直接手动计算,也可以用vip包快速提取、可视化:
library(vip) # 方法1:手动计算重要性,按重要性降序排列 feature_importance <- tidy(glmnet_model) %>% filter(term != "(Intercept)") %>% mutate(importance = abs(estimate)) %>% select(term, importance) %>% arrange(desc(importance)) # 方法2:用vip包直接提取重要性 vip_result <- vi(glmnet_model) # 快速可视化Top20重要特征 vip(glmnet_model, num_features = 20)
注意:上述重要性计算的前提是你在建模预处理阶段已经对所有数值特征做了标准化,否则不同量纲的特征系数没有可比性,计算出来的重要性也不具备参考价值。
内容的提问来源于stack exchange,提问作者Dite Bayu
相关产品推荐
相关产品推荐

