Visualizing decision tree in scikit-learn Visualizing decision tree in scikit-learn python python

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

  1. exporting it with export_graphviz as shown in previous answers
  2. Open the .dot file in a text editor
  3. Copy the piece of code and paste it @ webgraphviz.com