废话不多说,先贴代码from sklearn.datasets import load_iris

iris = load_iris()

# Model (can also use single decision tree)

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(n_estimators=10)

# Train

model.fit(iris.data, iris.target)

# Extract single tree

estimator = model.estimators_[5]

from sklearn.tree import export_graphviz

# Export as dot file

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)

# Convert to png using system command (requires Graphviz)

from subprocess import call

call(['dot', '-Tpng', 'tree.dot', '-o', 'tree.png', '-Gdpi=600'])

# Display in jupyter notebook

from IPython.display import Image

Image(filename = 'tree.png')

代码最终将决策树的结构输出为一张.png格式的图片,如下所示:

代码说明:

1. 训练一个模型并提取:我们可以只用单个决策树的模型,但是我通常会选择使用随机森林模型。(随机森林中的每一颗树都会略有不同。)from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(n_estimators=10)

# Train

model.fit(iris.data, iris.target)

# Extract single tree

estimator = model.estimators_[5]

2. 将树保存至 .dot文件:在这里我们使用到了Scikit-Learn中的export_graphviz函数。我们可以通过这个函数中的许多参数来调节图片的样式以及要显示的内容。from sklearn.tree import export_graphviz

# Export as dot file

export_graphviz(estimator_limited,

out_file='tree.dot',

feature_names = iris.feature_names,

class_names = iris.target_names,

rounded = True, proportion = False,

precision = 2, filled = True)

3. 将 .dot文件转换为 .png文件:使用这一功能,我们需要先安装支持 .dot运作的graphviz。完整的介绍请查看graphviz的介绍文档。(公众号文章不能置入超链接,请大家自行百度)# Convert to png

from subprocess import call

call(['dot', '-Tpng', 'tree.dot', '-o', 'tree.png', '-Gdpi=600'])

4. 可视化:使用Jupyter Notebook可以查看到最好的可视化效果。(你也可以使用matplotlib来显示图片)# Display in jupyter notebook

from IPython.display import Image

Image(filename = 'tree.png')

可视化随机森林的问题

在使用随机森林模型时,每一棵树的构造都是不同的。我使用这些图片来理解某一棵决策树的构造成因,而不是去理解具体的细节。当你有很多的特征时,将树的深度设置在一个相对较小的值是很有帮助的。否则的话,你将会构建出非常庞大的树,虽然这种树看起来很像回事,但是是完全无法解读的。(因为树的结构太过于复杂,分支过多,需要考虑的可能性也过多,同时也会造成过拟合的问题,当然这里作者主要关注的是可解读性的问题,译者注。)

结语

机器学习至今为止仍旧摆脱不了“黑匣子问题(black-box problem)”的困扰,可视化一棵树并没有办法解决这个黑匣子问题。然而,了解一棵树的结构可以让我们清楚这个模型并不是一个完全无法解释的模型。事实上,这个模型是一个有序列的逻辑的提问与回答——就像我们自己在做判断时一样。在你的模型中试试我在这篇文章中的代码吧。

想成为一名合格的数据科学家/AI工程师吗?关注“机器学习学社”获取每天一份的新鲜咨询,为你开拓属于你自己的AI之路

python画树林_如何用Scikit-learn可视化随机森林中的一棵树相关推荐

  1. 用python画耳朵_如何用python画一只兔子

    python的用处真的是太广泛了,今天在网上学习查找资料时,看到有网友用python来画画.用python画出一只兔子,为大家分享一下:如何用python画一只兔子? 画了一只大耳朵小兔子,灵感来源是 ...

  2. 用python画小兔子_如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍...

    周末学习了一下turtle库的基本函数,试着画了一只大耳朵小兔子,灵感来源是jellycat邦尼兔.turtle库中circle()函数用来画弧,但和通常先确定原点,再根据半径.夹角画弧的方法有所不同 ...

  3. 用python画耳朵_如何用python画猪头

    用python画猪头的方法:首先设置画布和画笔,代码为[a.screensize(400,300)a.setup(width=400,height=300)]:然后画脸型,代码为[.goto(-100 ...

  4. python画树林_在Python 3中使用深度森林(Deep Forest)进行分类

    深度森林(Deep Forest)是周志华教授和冯霁博士在2017年2月28日发表的论文<Deep Forest: Towards An Alternative to Deep Neural N ...

  5. 用python画地球_如何用PYTHON程序模拟一个太阳系?

    描述一个星系和描述一所学校有的思维方式是一样的,其实和python关系不大.都可用面向对象思维来抽象.描述某个物体通常都要先思考几个问题:该物体是什么? 该物体有什么特征? 该物体有什么能力? 该物体 ...

  6. python画地球仪_如何用 Python 制作地球仪?

    Python 功能真的很强,强大到让人吃惊,它能做的事囊括爬虫.数据分析.数据可视化.游戏等等各方面,这些功能在实际的使用中应用广泛,开发程序讲究页面的美观与炫酷效果, 今天的文章将给各位读者朋友们带 ...

  7. 怎么用python画房子_如何用Python画一颗小树?

    1.代码的结构: 本代码有两个子函数组成,有main函数和画树函数组成. 2.编写画树函数: 画树函数,就是用来画出我们的树的一种子函数,代码如下:def tree(plist,l,a,f): if ...

  8. 如何用python画转盘_如何用ppt做一个抽奖转盘 看完你学会了么

    现在抽奖转盘是很常见的,有时候公司办活动也会有抽奖活动,如果让自己做一个抽奖转盘,应该怎么做? 操作方法 01 打开ppt,把幻灯片版式设置成空白的,然后点击插入,选择图表. 02 选择饼图,用第一种 ...

  9. 用python画树林_用python画樱树

    from turtle import * from random import * from math import * def tree(n, l): pd() # 下笔 # 阴影效果 t = co ...

最新文章

  1. UITableView当数据很少的时候,去掉多余的cell分割线
  2. SQLSERVER2005登录时出错
  3. nssl1522-简单数数题【dp】
  4. 四年失去近 8% 的全球市场:Android 丢失的市场,被谁拿走了?
  5. Java 常用修饰符总结
  6. 【Python实践】Python部分实际案例解答1
  7. python实现bt下载器_10行 Python代码使用磁力链接批量下载种子
  8. OpenCV+Tesseract自动识别文字区域并识别文字
  9. 深度学习笔记--pytorch从梯度下降到反向传播BP到线性回归实现,以及API调用和手写数据集的实现
  10. GitHub上最火的两份Java面试小册,Star已经超百万
  11. 1015:计算并联电阻的阻值
  12. 使用firewall-cmd限制ssh只能从指定IP段访问
  13. dataGridView 粘贴数据并更新到数据库及发送邮件(二)
  14. 关于3D打印材料及发展方向分析
  15. 电网视频监控系统国网B接口中注册的接口流程GB281181国标流媒体服务平台
  16. 《《《翻译》》》OCTOMAP
  17. 开源夏令营《基于HackRF开发GPS信号仿真模拟器》开题报告
  18. 【Flink】Specifying keys via field positions is only valid for tuple data types.
  19. psql: error: connection to server on socket “/tmp/.s.PGSQL.5432“ failed: No such file or directory
  20. DDD(领域驱动设计)系列主题:DDD兴起的原因以及与微服务的关系

热门文章

  1. 玻璃隔断是最佳隔开空间的装修设计
  2. 产业区块链一周动态丨成都欲打造全球算力之都,BSN写入福建新基建三年行动计划...
  3. html 中加小手,html中鼠标如何设置显示小手状?
  4. 【C#】WinApi中SetTimer的使用
  5. 小米平板突然黑屏 摁哪也没反应
  6. 如何在Apple Watch上添加闹钟?
  7. ES5和ES6继承有何区别
  8. 企业寄件管理系统使用教程
  9. java list addall源码_解决list.add、list.addAll报错java.lang.UnsupportedOperationException
  10. Centos7.6利用vsftpd搭建FTP服务器详细教程