如何用Python从随机森林模型中可视化出一个决策树
在搭建机器学习模型时,如果能将模型可视化,能够大大帮助我们理解模型。此前集智曾分享一个叫做 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]
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)
# 转换为PNG文件 from subprocess import call call(['dot','-Gdpi=600'])
from IPython.display import Image Image(filename = 'tree.png') 结语 如今机器学习仍然面临所谓的黑箱问题,因而一张图是不足以解决问题的。不过,查看单个决策树的可视化结果能够为我们展示模型(或随机森林)并非是不可解释的,而是一系列的逻辑问题和答案,非常像我们在做决策时所做的种种推理。可以自己试着练习一下。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |