«.dot» не найден в пути — после добавления PATH в переменные среды Windows

Я пытаюсь визуализировать случайный лес с помощью 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
4 676
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Указанные пути в порядке. Возникла проблема с самим файлом dot_data. См. также встроенные комментарии для ясности.

# все операторы импорта здесь в соответствии с соглашением 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

Другие вопросы по теме