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

时间:2015-01-20 16:38:00

标签: python scikit-learn decision-tree dot pydot

这是我在stackoverflow上发布的第一个问题所以我为布局中的任何不幸事件道歉等等(建议欢迎)。非常感谢您的帮助!

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

我试过的代码看起来像这样:

...
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行上下文附近的语法错误:>>> [<<   0.20938667]警告:/ tmp / tmpAy7d59:18:字符串跑过行尾警告:/ tmp / tmpAy7d59:20:字符串跑过行尾

依此类推更多“字符串已超越行尾”错误。

我之前从未使用.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,这也给出了同样的错误。

2 个答案:

答案 0 :(得分:1)

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

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

•'Dot'文件可以使用'graphviz'实用程序

转换为图像文件

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

•确保将'\ graphviz \ bin'添加到环境变量中的'path'。

可以使用sklearn模块借助以下命令

提取“点”文件
from sklearn import tree
tree.export_graphviz(clf,out_file='tree.dot')

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

 dot -Tpng tree.dot -o tree.png

答案 1 :(得分:0)

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

  

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

那就是说,当我尝试在Graphviz版本dot上使用2.39.20141007.0445生成你的情节时,它的效果非常好:

enter image description here

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