【问题标题】:".dot" not found in path - After adding PATH to Windows Environment variables在路径中找不到“.dot” - 将 PATH 添加到 Windows 环境变量后
【发布时间】:2019-08-28 23:13:45
【问题描述】:

我正在尝试使用 Graphviz2 可视化随机森林。我正在使用的代码如下所示。但是,当我尝试读取 .dot 文件时,会出现以下错误:

FileNotFoundError: [WinError 2] "dot" not found in path

我看到其他人遇到这个错误并通过修改 Windows 环境变量来解决它。我在 PATH 中添加了以下内容:

C:\Program Files (x86)\Graphviz2.38\bin;
C:\Program Files (x86)\Graphviz2.38\;
C:\Users\Adarsh\Anaconda3\Lib\site-packages\graphviz

这些都不行。

import pickle
filename = '11f_rf_roc91.sav'
loaded_model = pickle.load(open(filename, 'rb'))

import os
from sklearn.tree import export_graphviz
import six
import pydot
from sklearn import tree
dotfile = six.StringIO()
i_tree = 0
for tree_in_forest in loaded_model.estimators_:
    export_graphviz(tree_in_forest, out_file='tree.dot', feature_names = list(X), class_names = ["0", "1"], rounded = True, proportion = False, precision = 2, filled = True)
    (graph,) = pydot.graph_from_dot_file('tree.dot')
    name = 'tree' + str(i_tree)
    graph.write_png(name+  '.png')
    os.system('dot -Tpng tree.dot -o tree.png')
    i_tree +=1

【问题讨论】:

    标签: python-2.7 path tree random-forest


    【解决方案1】:

    上述路径都可以。您的 dot_data 文件本身存在问题。为了清楚起见,也请参阅内联 cmets。

    #这里所有的import语句都按照Python PEP约定。

    import os
    import pydot
    import pickle
    
    from sklearn import tree
    from sklearn.tree import export_graphviz     # this can be even > import export_graphviz <
    from sklearn.externals.six import StringIO   # shortened StringIO instead of six.StringIO
    
    filename = '11f_rf_roc91.sav'
    loaded_model = pickle.load(open(filename, 'rb'))
    
    dot_data = StringIO()          # this is data not filename "dotfile".
    i_tree = 0
    
    for tree_in_forest in loaded_model.estimators_:
        export_graphviz(tree_in_forest, 
                        out_file      = dot_data,    # now linked to correct file data
                        feature_names = list(X),     # X seems not to be defined.
                        class_names   = ["0", "1"], 
                        rounded       = True, 
                        proportion    = False, 
                        precision     = 2, 
                        filled        = True)
    
        graph = pydot.graph_from_dot_file(dot_data)
        name = 'tree' + str(i_tree)
        graph.write_png(name+  '.png')
        os.system('dot -Tpng tree.dot -o tree.png')
        i_tree += 1
    

    【讨论】:

      猜你喜欢
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 2020-05-04
      相关资源
      最近更新 更多