Orange 3.30.1导入SMOTE提示无法从sklearn.metrics.pairwise导入_euclidean_distances
问题根因
该报错为imbalanced-learn 0.8.1版本与Orange 3.30.1内置的scikit-learn 1.0版本的兼容性冲突导致:
imbalanced-learn 0.8.1依赖scikit-learn的私有函数_euclidean_distances,但scikit-learn 1.0版本已将该私有函数从模块对外导出列表中移除,哪怕函数定义仍存在于源码文件中,也无法直接通过import语句导入。
解决方法
方案1:升级为适配版本的imbalanced-learn
打开Orange命令提示符,执行如下命令卸载旧版本、安装兼容版本:
pip uninstall -y imblearn imbalanced-learn pip install imbalanced-learn>=0.9.0
0.9.0及以上版本的imbalanced-learn已修复对scikit-learn私有函数的依赖,可正常导入SMOTE。
方案2:临时补丁修复(无需改动已安装库版本)
如果不想调整已安装的库版本,可在Python Script组件的代码最开头先添加补丁代码,再导入SMOTE:
# 手动注入缺失的私有函数引用 from sklearn.metrics.pairwise import euclidean_distances import sklearn.metrics.pairwise setattr(sklearn.metrics.pairwise, '_euclidean_distances', euclidean_distances) # 后续可正常导入SMOTE from imblearn.over_sampling import SMOTE
该方案通过给scikit-learn的pairwise模块手动添加_euclidean_distances别名的方式,临时满足imbalanced-learn的导入要求。
内容的提问来源于stack exchange,提问作者Robert Granat
相关产品推荐
相关产品推荐

