sklearn的SelectFromModel对随机森林和梯度提升分类器选特征差异大
特征选择结果差异的原因
两种模型的选择结果差异来自两方面核心原因:
- 特征重要性的计算逻辑不同
随机森林的特征重要性由多棵独立决策树的分裂增益平均得到,重要性得分分布相对平滑,绝大多数特征都会有非零得分,默认均值阈值下只会剔除少量得分极低的特征。
你当前使用的梯度提升分类器参数为n_estimators=10、max_depth=1,属于极浅的弱学习器配置,串行训练过程中只有极少量特征有机会参与节点分裂,其余特征的重要性得分直接为0,重要性分布极度不均衡,均值阈值会过滤掉所有0得分的特征,因此出现几乎剔除所有特征的情况。 - SelectFromModel默认阈值适配性问题
工具默认使用特征重要性均值作为筛选阈值,该阈值对重要性分布高度敏感:梯度提升树在你当前参数下仅少量特征有非零得分,均值普遍高于低分段的非零得分,最终仅会保留极少数高得分特征;而随机森林的得分分布平滑,均值能覆盖大部分有信息的特征,因此剔除量很小。
对比模型表现的阈值调整建议
是否调整阈值取决于你的对比目标:
- 若你需要对比两个模型本身的拟合能力差异:必须统一输入特征,要么手动设置阈值(比如固定保留topN个特征、或设定统一的得分阈值)让两者选出的特征数量一致,要么先使用独立于两个模型的特征选择方法得到统一特征子集,再喂给两个模型训练。否则输入特征不一致的情况下,性能差异无法归因于模型本身。
- 若你需要对比*「特征选择+模型训练」完整Pipeline的表现*:不需要调整阈值,直接使用各自选择的特征训练即可,此时得到的性能差异是两个方案的真实落地效果差异。
补充优化建议:先调整梯度提升分类器的参数,n_estimators=10的配置拟合能力过弱,得到的特征重要性本身参考价值很低,建议将n_estimators调整到50以上、max_depth调整到2~3后再做特征选择,结果会更合理。
内容的提问来源于stack exchange,提问作者nibs
相关产品推荐
相关产品推荐

