Visualizing decision tree in scikit-learn
Here is one liner for those who are using jupyter and sklearn(18.2+) You don't even need matplotlib
for that. Only requirement is graphviz
pip install graphviz
than run (according to code in question X is a pandas DataFrame)
from graphviz import Sourcefrom sklearn import treeSource( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns))
This will display it in SVG format. Code above produces Graphviz's Source object (source_code - not scary) That would be rendered directly in jupyter.
Some things you are likely to do with it
Display it in jupter:
from IPython.display import SVGgraph = Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns))SVG(graph.pipe(format='svg'))
Save as png:
graph = Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns))graph.format = 'png'graph.render('dtree_render',view=True)
Get the png image, save it and view it:
graph = Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns))png_bytes = graph.pipe(format='png')with open('dtree_pipe.png','wb') as f: f.write(png_bytes)from IPython.display import ImageImage(png_bytes)
If you are going to play with that lib here are the links to examples and userguide
sklearn.tree.export_graphviz
doesn't return anything, and so by default returns None
.
By doing dotfile = tree.export_graphviz(...)
you overwrite your open file object, which had been previously assigned to dotfile
, so you get an error when you try to close the file (as it's now None
).
To fix it change your code to
...dotfile = open("D:/dtree2.dot", 'w')tree.export_graphviz(dtree, out_file = dotfile, feature_names = X.columns)dotfile.close()...
If, like me, you have a problem installing graphviz, you can visualize the tree by
- exporting it with
export_graphviz
as shown in previous answers - Open the
.dot
file in a text editor - Copy the piece of code and paste it @ webgraphviz.com