加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何用Python从随机森林模型中可视化出一个决策树

发布时间:2020-12-17 00:41:41 所属栏目:Python 来源:网络整理
导读:在搭建机器学习模型时,如果能将模型可视化,能够大大帮助我们理解模型。此前集智曾分享一个叫做 ANN Visualizer 工具,只需一行 Python 代码就能给自己正在搭建的神经网络创建出简洁漂亮的可视化图形: https://www. zhihu.com/question/3704 6157/answer/3

在搭建机器学习模型时,如果能将模型可视化,能够大大帮助我们理解模型。此前集智曾分享一个叫做 ANN Visualizer 工具,只需一行 Python 代码就能给自己正在搭建的神经网络创建出简洁漂亮的可视化图形:

https://www. zhihu.com/question/3704 6157/answer/359507425

目前 ANN Visualizer 能够可视化深层神经网络和卷积神经网络,但是对于一些更简单的模型比如随机森林,尚无法可视化。今天就教大家如何用 Python 和 Scikit-learn 从随机森林模型中可视化出一个决策树。

可视化的背后考量

在随机森林中每个决策树的创建各不相同,所以我们用图像来展示每个决策树背后的推理逻辑,而非具体细节。当特征很多时,这样能帮你限制决策树的最大深度,不然最后你会得到数量庞大的决策树,虽然看着很壮观,但是却无法解释!下图就是有 50 个特征时的决策树示例:

可视化决策树

只需将如下代码拷贝粘贴到你的 Jupyter notebook 或 Python 脚本中,替换为你自己的数据后运行即可:

    from sklearn.datasets import load_iris
iris = load_iris()
# 模型(也可用单个决策树)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=10)
# 训练
model.fit(iris.data,iris.target)
# 提取一个决策树
estimator = model.estimators_[5]
from sklearn.tree import export_graphviz
# 导出为dot 文件
export_graphviz(estimator,out_file='tree.dot',feature_names = iris.feature_names,class_names = iris.target_names,rounded = True,proportion = False,precision = 2,filled = True)
# 用系统命令转为PNG文件(需要 Graphviz)
from subprocess import call
call(['dot','-Tpng','tree.dot','-o','tree.png','-Gdpi=600'])
# 在jupyter notebook中展示
from IPython.display import Image
Image(filename = 'tree.png')

最终会得到如下图所示的一个完整的决策树:

图:用鸢尾花数据集得到的决策树

代码解释

  • 创建一个模型进行训练和提取?:这里我们可以使用一个单一的决策树模型,但这里以随机森林模型为例。(决策树之间会略有差异)。
    from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=10)
# 训练
model.fit(iris.data,iris.target)
# 提取一个决策树
estimator = model.estimators_[5]
  • 将决策树导出为.dot 文件?:这会使用 Scikit-learn 中的 export_graphviz 函数。这里有很多参数控制着最终展示的信息。可以查看 Scikit-learn 文档详情:

http:// scikit-learn.org/stable /modules/generated/sklearn.tree.export_graphviz.html

    from sklearn.tree import export_graphviz
# 导出为dot文件
export_graphviz(estimator_limited,filled = True)
  • 使用系统命令将 dot 转为 png?:使用 Python 运行系统命令,很方便解决一些简单任务。这需要我们安装graphviz(?https:// graphviz.gitlab.io/down load/?),它包含了dot实用程序。
    # 转换为PNG文件
from subprocess import call
call(['dot','-Gdpi=600'])
  • 可视化:?在 Jupyter notebook 中展示可视化结果,也可以使用 matplotlib 来展示图像。
    from IPython.display import Image
Image(filename = 'tree.png')

结语

如今机器学习仍然面临所谓的黑箱问题,因而一张图是不足以解决问题的。不过,查看单个决策树的可视化结果能够为我们展示模型(或随机森林)并非是不可解释的,而是一系列的逻辑问题和答案,非常像我们在做决策时所做的种种推理。可以自己试着练习一下。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读