Scikit-learn StackingClassifier调用predict_proba因缺失值触发assert_all_finite报错
Scikit-learn 0.24.2版本StackingClassifier调用predict_proba缺失值报错解决方案
报错根因
- 你对基学习器的特性认知存在偏差:Scikit-learn原生的
ExtraTreesClassifier、RandomForestClassifier支持缺失值输入是1.0及以上版本才新增的特性,你当前使用的0.24.2版本中,这两个模型在输入校验阶段就会强制检测非有限值,直接触发你看到的_assert_all_finite报错,和Stacking框架本身无关。 - 堆栈信息也可以佐证这一点:报错触发在
ExtraTreesClassifier.predict_proba的输入校验环节,并非StackingClassifier的全局校验逻辑,Stacking作为集成框架不会对输入做额外限制,输入有效性校验由每个基学习器各自执行。
解决方案
你可以根据自身场景选择任意一种方案解决问题:
- 升级Scikit-learn版本到1.0或更高,即可直接使用原生树模型的缺失值处理能力,无需修改其他代码
- 若暂不能升级Scikit-learn版本,可在数据输入模型前新增缺失值处理步骤,使用
SimpleImputer等工具对缺失值做均值、中位数、众数或常数填充 - 将
ExtraTreesClassifier、RandomForestClassifier替换为LightGBM、XGBoost等原生支持缺失值的第三方模型实现,规避旧版本Scikit-learn的限制
内容的提问来源于stack exchange,提问作者Guido
相关产品推荐
相关产品推荐

