使用graphwiz显示此决策树

时间:2017-03-06 08:50:49

标签: python python-3.x scikit-learn graphviz decision-tree

我正在学习如何使用python v3.6使用scikit-learn进行机器学习的决策树。

这是代码;

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import mglearn
import graphviz

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

from sklearn.tree import DecisionTreeClassifier

cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, stratify=cancer.target, random_state=42)
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)

tree = DecisionTreeClassifier(max_depth=4, random_state=0)
tree.fit(X_train, y_train)

from sklearn.tree import export_graphviz
export_graphviz(tree, out_file="tree.dot", class_names=["malignant", "benign"],feature_names=cancer.feature_names, impurity=False, filled=True)

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

如何使用graphviz查看dot_graph中的内容?据推测,它应该看起来像这样;

enter image description here

5 个答案:

答案 0 :(得分:3)

graphviz.Source(dot_graph)会返回graphviz.files.Source个对象。

g = graphviz.Source(dot_graph)

使用g.render()创建图像文件。当我在没有参数的代码上运行它时,我得到了Source.gv.pdf,但您可以指定不同的文件名。还有一个快捷方式g.view(),用于保存文件并在适当的查看器应用程序中打开它。

如果您将代码粘贴在富终端(例如带有内嵌图形的Spyder / IPython或Jupyter笔记本)中,它将自动显示图像而不是对象的Python表示。

答案 1 :(得分:2)

在jupyter笔记本中,以下内容绘制了决策树:

from sklearn.tree import DecisionTreeClassifier
from sklearn import tree


model = DecisionTreeClassifier()
model.fit(X, y)
dot_data = tree.export_graphviz(model, 
                  feature_names=feature_names,  
                  class_names=class_names,  
                  filled=True, rounded=True,  
                  special_characters=True,
                   out_file=None,
                           )
graph = graphviz.Source(dot_data)
graph

如果要将其另存为png:

graph.format = "png"
graph.render("file_name")

答案 2 :(得分:1)

我正在Windows 10中工作。 我通过添加到“路径”环境变量来解决此问题。 我添加了错误的路径, 我添加了Drive:\ Users \ User.Name \ AppData \ Local \ Continuum \ anaconda3 \ envs \ MyVirtualEnv \ lib \ site-packages \ graphviz 应该使用 驱动器:\ Users \ User.Name \ AppData \ Local \ Continuum \ anaconda3 \ envs \ MyVirtualEnv \ Library \ bin \ graphviz 最后,我同时使用了两者,然后重新启动了python / anaconda。 还添加了pydotplus路径,该路径位于.... MyVirtualEnv \ lib \ site-packages \ pydotplus中。

答案 3 :(得分:1)

Jupyter将按原样显示图形,但是如果您想放大更多,可以尝试保存文件并进一步检查:

# Draw graph
graph = pydotplus.graph_from_dot_data(dot_data)  

# Show graph
Image(graph.create_png())

答案 4 :(得分:0)

您可以使用IPython.display中的display。这是一个示例:

from sklearn.tree import DecisionTreeClassifier
from sklearn import tree

model = DecisionTreeClassifier()
model.fit(X, y)

from IPython.display import display
display(graphviz.Source(tree.export_graphviz(model)))