Oliver G
Oliver G

Reputation: 375

Why is my image_path undefined when using export_graphviz? - Python 3

I'm trying to run this machine learning tree algorithm code in IPython:

from sklearn.datasets import load_iris

from sklearn.tree import DecisionTreeClassifier

iris = load_iris()
X = iris.data[:, 2:] # petal length and width
y = iris.target

tree_clf = DecisionTreeClassifier(max_depth=2)
tree_clf.fit(X, y)

from sklearn.tree import export_graphviz
export_graphviz(tree_clf, out_file=image_path("iris_tree.dot"),
    feature_names=iris.feature_names[2:],
    class_names=iris.target_names,
    rounded=True,
    filled=True
)

But I get this error when run in IPython: enter image description here

I'm unfamiliar with export_graphviz, does anyone have any idea how to correct this?

Upvotes: 12

Views: 8815

Answers (6)

Ebram
Ebram

Reputation: 181

I have a sklearn with the version of 0.20.1, and I got the example to work through the line below.

 export_graphviz(
        tree_clf,
        out_file = "iris_tree.dot",
        feature_names = iris.feature_names[2:])

Upvotes: 1

caesar_cipher
caesar_cipher

Reputation: 31

I know you might have got what you were looking for. But in case you don't, all you need to do is just replace:

out_file=image_path("iris_tree.dot")

with:

out_file="iris_tree.dot"

This will create the .dot file in the same directory in which your current script is. You can also give the absolute path to where you want to save the .dot file as:

out_file="/home/cipher/iris_tree.dot"

Upvotes: 3

Hermes Morales
Hermes Morales

Reputation: 637

You can directly type instead of using the webgraphviz, if you are using sklearn version 0.20.

import graphviz
with open ("iris_tree.dot")  as f:
    dot_graph = f.read()
display (graphviz.Source(dot_graph))

With sklearn 0.22 you have to change again. See sklearn users guide.

Upvotes: 0

Rishabh Singh
Rishabh Singh

Reputation: 141

To get rid of all the mess simply remove image_path, now out_file="iris_tree.dot", after running that command a file will be saved in your folder named iris_tree. Open that file in Microsoft Word and copy all of its content. Now open your browser and type "webgraphviz" and then click on the first link. Then delete whatever is written in white space and paste your code which is copied from iris_tree. Then click "generate graph". Scroll down and your graph is ready.

Upvotes: 10

0xMinCha
0xMinCha

Reputation: 416

I guess you are following "Hands on Machine Learning with Scikit-Learn and TensorFlow" book by Aurelien Geron. I encountered with the same problem while trying out "Decision Trees" chapter. You can always refer to his GitHub notebooks . For your code, you may refer "decision tree" notebook. Below I paste the code from notebook. Please do go ahead and have a look at the notebook also.

# To support both python 2 and python 3
from __future__ import division, print_function, unicode_literals

# Common imports
import numpy as np
import os

# to make this notebook's output stable across runs
np.random.seed(42)

# To plot pretty figures
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12

# Where to save the figures
PROJECT_ROOT_DIR = "."
CHAPTER_ID = "decision_trees"

def image_path(fig_id):
    return os.path.join(PROJECT_ROOT_DIR, "images", CHAPTER_ID, fig_id)

def save_fig(fig_id, tight_layout=True):
    print("Saving figure", fig_id)
    if tight_layout:
        plt.tight_layout()
    plt.savefig(image_path(fig_id) + ".png", format='png', dpi=300)

Upvotes: 13

Cirruse Salehnasab
Cirruse Salehnasab

Reputation: 21

you must correct

out_file=image_path("iris_tree.dot"),

in below code line:

out_file="C:/Users/VIDA/Desktop/python/iris_tree.dot",

Upvotes: 2

Related Questions