当前位置: 首页 > 工具软件 > 123Tree > 使用案例 >

sklearn 出现 cannot import name 'plot_tree' 与 module 'sklearn.tree' has no attribute 'plot_tree' 问题解决

陆阳曜
2023-12-01

问题: ImportError: cannot import name ‘plot_tree’

或 module ‘sklearn.tree’ has no attribute ‘plot_tree’

scikit-learn 官方文档 关于决策树模块(tree)的示例中用到了决策树绘制函数 plot_tree,绘制决策树的示例代码(1.10.1节)如下:

tree.plot_tree(clf.fit(iris.data, iris.target))

导入 plot_tree 函数的 示例代码 如下:

from sklearn.tree import DecisionTreeClassifier, plot_tree

笔者在执行以上代码时就会报错。
由于在官方文档中并没有对 plot_tree 函数的使用条件进行特别的说明,笔者在这个地方被坑了很多时间,下面总结一下这个问题的解决经验。

问题原因: scikit-learn 的版本

从 github 上 scikit-learn 项目的 issue 中得知:plot_tree 函数是在 scikit-learn0.21 版本加入的,所以需要 0.21 之后的的版本才能使用这个函数,如果环境中的 scikit-learn 低于这个版本,在导入或调用 plot_tree 函数时自然就会报错了。

查看 scikit-learn 库版本号

要查看当前环境某个模块的版本号可打印出该模块的 version 属性:

import sklearn
print(sklearn.__version)

0.20

解决问题

更新所使用的环境中的 scikit-learn 库:

  • Anaconda 环境
# 激活需要的虚拟环境
conda activate 虚拟环境名称
# 使用 conda 更新 
conda update scikit-learn
# 也可以使用 pip 更新
pip install --upgrade scikit-learn

执行以上命令完成升级后,可再次查看 scikit-learn 的版本是否达到要求,如果依然不合要求,可尝试修改更新源后再次更新。
更新源相关指令如下:

# 显示镜像源:
conda config --show channel

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
# for legacy win-64
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/peterjc123/

注意事项

  • 使用 Anaconda 虚拟环境时,应注意是否选择了正确的虚拟环境。
  • plot_tree 使用了 matplotlib 模块绘图,如果环境中没有则需要安装此模块。
 类似资料: