以 png 或 pdf 可视化 scikit-learn/sklearn 多输出决策树回归

Posted

技术标签:

【中文标题】以 png 或 pdf 可视化 scikit-learn/sklearn 多输出决策树回归【英文标题】:Visualizing scikit-learn/ sklearn multi-output decision tree regression in png or pdf 【发布时间】:2015-03-18 23:47:17 【问题描述】:

这是我在 *** 上发布的第一个问题,因此对于布局等方面的任何失误,我深表歉意(欢迎提供建议)。非常感谢您的帮助!

我正在尝试使用 pydot 以 png 或 pdf 格式可视化具有多个输出(如 http://scikit-learn.org/stable/auto_examples/tree/plot_tree_regression_multioutput.html#example-tree-plot-tree-regression-multioutput-py 中所述)的 DecisionTreeRegressor 的输出。

我试过的代码是这样的:

...
dtreg = tree.DecisionTreeRegressor(max_depth=3)
dtreg.fit(x,y)

tree.export_graphviz(dtreg, out_file='tree.dot') #print dotfile

dot_data = StringIO()
tree.export_graphviz(dtreg, out_file=dot_data)
print dot_data.getvalue()
pydot.graph_from_dot_data(dot_data.getvalue()).write_pdf("pydot_try.pdf") 

编写 pdf 会出现以下错误:

pydot.InvocationException:程序以状态终止:1.stderr 如下:警告:/tmp/tmpAy7d59:7:字符串超出行尾错误: /tmp/tmpAy7d59:8:第 8 行上下文附近的语法错误:>>> [

以此类推,出现更多“字符串超出行尾”错误。

我以前从未使用过 .dot,但我怀疑多输出格式可能存在问题。例如,树的一部分如下所示:

digraph Tree 
0 [label="X[0] <= 56.0000\nmse = 0.0149315126135\nsamples = 41", shape="box"] ;
1 [label="X[0] <= 40.0000\nmse = 0.0137536911947\nsamples = 25", shape="box"] ;
0 -> 1 ;
2 [label="X[0] <= 24.0000\nmse = 0.0152142545276\nsamples = 21", shape="box"] ;
1 -> 2 ;
3 [label="mse = 0.0140\nsamples = 15\nvalue = [[ 0.83384667]
 [ 0.20938667]
 [ 0.08511333]
 [ 0.04234667]
 [ 0.08158   ]
 [ 0.17948667]
 [ 0.03616   ]
 [ 0.00995333]
 [ 0.99529333]
 [ 0.13715333]
 [ 0.10294667]
 [ 0.06632667]]", shape="box"] ;
2 -> 3 ;
4 [label="mse = 0.0170\nsamples = 6\nvalue = [[ 0.69588333]
 [ 0.20275   ]
 [ 0.0953    ]
 [ 0.0436    ]
 [ 0.1216    ]
 [ 0.17248333]
 [ 0.04393333]
 [ 0.01178333]
 [ 0.99913333]
 [ 0.12348333]
 [ 0.10838333]
 [ 0.06973333]]", shape="box"] ;
2 -> 4 ;

我不知道如何解决这个问题,因为这只是我从 DecisionTreeRegressor 得到的输出。

我也试过转换点文件:

dot -Tpng tree.dot -o tree.png

但这会产生相同的错误(字符串超出行尾) 我还尝试使用 xdot 可视化 tree.dot 并给出了相同的错误。

【问题讨论】:

【参考方案1】:

按照以下说明查看决策树。

•使用sklearn,我们可以以点格式导出树。 “点”格式文件是一个文本文件。

•“点”文件可以使用“graphviz”实用程序转换为图像文件

•从网站下载“graphviz.msi” - http://www.graphviz.org/Download_windows.php

•确保将“\graphviz\bin”添加到环境变量的“路径”中。

可以借助以下命令使用 sklearn 模块提取“点”文件

from sklearn import tree
tree.export_graphviz(clf,out_file='tree.dot')

在命令提示符下执行以下命令将“.dot”文件转换为“.png”文件。

 dot -Tpng tree.dot -o tree.png

【讨论】:

【参考方案2】:

错误消息似乎告诉您多行字符串(标签)存在问题。如here 所示,要在dot 中指定多行标签,您可以使用\n,或者如DOT language documentation 中所述:

作为可读性的另一个帮助,点允许双引号字符串 使用 a 的标准 C 约定跨越多条物理线路 反斜杠紧接在换行符之前。

也就是说,当我尝试在 Graphviz 版本 2.39.20141007.0445 上使用 dot 生成您的绘图时,它工作得非常好:

我找不到有关格式更改的参考,但是安装最新版本的 Graphviz 可能值得再次尝试。

【讨论】:

同样的代码现在对我来说也很好用。我不确定发生了什么/已解决,但感谢您指出!

以上是关于以 png 或 pdf 可视化 scikit-learn/sklearn 多输出决策树回归的主要内容,如果未能解决你的问题,请参考以下文章

R语言可视化结果图片保存实战:将图片保存为pdf文件 R语言将图片保存为png文件 R语言使用ggsave将图片保存为png文件或者pdf文件

可视化应用实战案例:绘制交互式+pdf+png等多格式桑基图

如何将整个tkinter画布截图为png或pdf

剑道图表导出为 pdf 或 png

R:如何将绘图/图形导出为 png 或 pdf 文件

从 UIWebView 或 UIView 获取 PDF/PNG 作为输出