【问题标题】:Python [Graphviz pydot]Python [Graphviz pydot]
【发布时间】:2018-06-20 18:25:24
【问题描述】:

我正在尝试可视化一个简单的决策树模型:

import sklearn.datasets as datasets
import pandas as pd
iris=datasets.load_iris()
df=pd.DataFrame(iris.data, columns=iris.feature_names)
y=iris.target
from sklearn.tree import DecisionTreeClassifier
dtree=DecisionTreeClassifier()
dtree.fit(df,y)
from sklearn.externals.six import StringIO  
from IPython.display import Image  
from sklearn.tree import export_graphviz
import pydotplus
dot_data = StringIO()
export_graphviz(dtree, out_file=dot_data,  
            filled=True, rounded=True,
            special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())  
Image(graph.create_png())

我收到了这个错误:TypeError: add_node()收到了一个非节点类对象:<pydotplus.graphviz.Node object at 0x000000000927A160>

感谢您的帮助

【问题讨论】:

  • 如果你把整个堆栈跟踪放进去会有帮助
  • 另外,它对我有用
  • 按照PEP 8 的建议,导入文件最好放在文件顶部。

标签: python graphviz pydot


【解决方案1】:

使用pydot == 1.2.4scikit-learn == 0.19.1(其中replaced the package sklearn)对我有用,没有任何错误:

from IPython.display import Image  
import pandas as pd
import pydot
import sklearn.datasets as datasets
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz

iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
y = iris.target
dtree = DecisionTreeClassifier()
dtree.fit(df, y)
dot_data = export_graphviz(dtree, out_file=None,
                filled=True, rounded=True,
                special_characters=True)
(graph,) = pydot.graph_from_dot_data(dot_data)
Image(graph.create_png())

另外,不需要传递StringIO 对象。作为函数sklearn.tree.export_graphvizsays的文档字符串:

dot_data : 字符串

GraphViz 点格式的输入树的字符串表示。 仅当 out_file 为 None 时返回。

请注意default value

out_file : 文件对象或字符串,可选(默认='tree.dot') 输出文件的句柄或名称。如果None,则结果为 作为字符串返回。这将是 0.20 版的默认设置。

【讨论】:

    猜你喜欢
    • 2017-12-12
    • 2017-07-25
    • 2018-02-08
    • 2016-08-21
    • 2015-02-13
    • 2017-01-13
    • 2018-09-25
    • 2021-03-07
    相关资源
    最近更新 更多