导入eli5提示sklearn.metrics.scorer模块缺失报错如何解决
这个报错是版本不兼容导致的:scikit-learn 0.24及以上版本移除了公开的sklearn.metrics.scorer模块,将相关实现移到了内部的sklearn.metrics._scorer路径下,你当前通过conda-forge安装的eli5版本较旧,代码里还在引用已经被移除的旧路径,因此触发模块找不到的错误。
按优先级从高到低选择以下任意一种方法处理即可:
方案1:升级eli5到适配新版scikit-learn的最新版本
先激活你使用的conda环境,执行以下命令覆盖安装最新版eli5:conda activate 你当前使用的环境名称 pip install --upgrade eli5安装完成后完全关闭Jupyter Notebook,重启内核后再尝试导入eli5即可。conda-forge源的eli5版本通常更新滞后,用pip安装可以拉到已经修复兼容问题的最新发布版。
方案2:降级scikit-learn到旧版eli5兼容的版本
如果你的项目有固定eli5版本的要求无法升级,可以将scikit-learn降到0.23.x的兼容版本:conda activate 你当前使用的环境名称 conda install scikit-learn=0.23.2安装完成后重启Jupyter内核即可正常导入。
方案3:临时添加路径兼容映射(不想改动现有包版本时使用)
直接在你的Notebook代码最开头,在导入eli5之前运行以下代码,手动补全eli5需要的旧模块路径映射:import sklearn.metrics import sklearn.metrics._scorer # 给旧路径做别名映射,适配eli5的旧引用逻辑 sklearn.metrics.scorer = sklearn.metrics._scorer # 映射完成后再导入eli5就不会触发报错 import eli5
修复报错后,你可以直接用eli5的权重输出接口拿到排名前10的特征重要性,参考代码如下:
# 替换成你自己的训练数据和模型训练逻辑 # X_train = 你的训练特征集 # y_train = 你的训练标签 # model = 你训练好的模型对象 # feature_names = X_train.columns.tolist() # 你的特征名列表 # 可视化输出重要性排名前10的特征 eli5.show_weights(model, top=10, feature_names=feature_names) # 如果需要直接拿到结构化的重要性表格结果,可以调用df格式接口 feat_imp_df = eli5.explain_weights_df(model, top=10, feature_names=feature_names)
注意:所有涉及包版本变更的操作,完成后必须重启Jupyter Notebook的运行内核,否则内核会继续加载缓存的旧版本包,报错不会消失。
内容的提问来源于stack exchange,提问作者Supreetha Krishna

