如何添加删除常量值列的步骤,解决step_corr()运行警告问题?
零方差变量触发
step_corr()警告的规范处理方案 核心结论
优先直接删除训练窗口内取值完全恒定的零方差变量,仅在明确变量后续会产生有效取值的特殊场景下,再选择将其排除在相关性计算步骤外,不建议忽略警告直接运行。
选择直接删除的原因
- 取值恒定的变量没有任何信息增益,对所有模型的预测效果都不会有正向贡献,留在特征集只会增加冗余计算,还可能引发后续建模步骤的同类报错(比如线性模型系数估计异常、树模型分裂逻辑报错),后续做特征重要性排序、模型解释时也会出现无意义的结果。
step_corr()抛出警告的底层原因是相关性计算依赖变量的标准差,零方差变量标准差为0,会出现除以0的逻辑异常,仅跳过相关性计算不删除变量,没有解决根本问题。
规范的Recipe流程调整
特征过滤步骤需要严格按如下顺序排列,从根源避免这类警告:
- 首先执行缺失值填充:调用
step_impute_mean()/step_impute_knn()等函数处理缺失值,避免缺失值导致的假零方差问题 - 其次执行零方差/近零方差过滤:调用
step_zv()自动删除当前训练集内所有取值恒定的变量,若数据集噪声大可以追加step_nzv()过滤近零方差变量 - 最后执行
step_corr()做高相关变量过滤
特殊场景处理
如果你明确知道当前窗口内的恒定变量存在业务意义,后续滚动窗口中会产生有效取值(比如时间维度的政策哑变量、活动标记变量等),不需要删除,仅需要在step_corr()中排除这类变量即可,示例写法:
recipe(target ~ ., data = train_data) %>% # 其余预处理步骤 step_corr(all_numeric_predictors(), -all_of(c("policy_dummy", "campaign_flag")), threshold = 0.7)
内容的提问来源于stack exchange,提问作者fahmy
相关产品推荐
相关产品推荐

