Как решить проблему «[Ошибка 9] Неверный файловый дескриптор», возникающую из «pydotplus.graph_from_dot_file»?

#python #graphviz #dot #pydot

#python #graphviz #точка #pydot

Вопрос:

У меня есть функция, настроенная для моделирования некоторых данных с помощью алгоритма DeccisionTreeClassifier, где я могу настроить максимальную глубину дерева. Эта функция возвращает оценку, матрицу путаницы, а также генерирует точечный файл с деревом, который преобразуется в svg. Кстати, я работаю в Windows.

Эта функция работает как шарм для максимальной глубины от 1 до 5, но при переходе на max_depth = 6 происходит сбой с [Errno 9] неверным файловым дескриптором.

 def dtc (x_train, y_train, x_test, y_test, max_depth):
    dtc_model = tree.DecisionTreeClassifier(max_depth=max_depth)
    dtc_model.fit(x_train, y_train)
    dtc_score=dtc_model.score(x_test, y_test)
    dtc_scoret=dtc_model.score(x_train, y_train)
    y_dtc = dtc_model.predict(x_test)
    dtc_matrix= confusion_matrix(y_test,y_dtc)
    tree.export_graphviz(dtc_model,out_file=(r'tree' str(max_depth) '.dot'),feature_names=list_variables)
    graph = pydotplus.graph_from_dot_file(r'tree' str(max_depth) '.dot')  
    graph.write_svg(r'tree' str(max_depth) '.svg')
    return dtc_score, dtc_scoret, dtc_matrix


results1=dtc (x_train, y_train, x_test, y_test, 1)
results2=dtc (x_train, y_train, x_test, y_test, 2)
results3=dtc (x_train, y_train, x_test, y_test, 3)
results4=dtc (x_train, y_train, x_test, y_test, 4)
results5=dtc (x_train, y_train, x_test, y_test, 5)
results6=dtc (x_train, y_train, x_test, y_test, 6)
results7=dtc (x_train, y_train, x_test, y_test, 7)
results8=dtc (x_train, y_train, x_test, y_test, 8)
results9=dtc (x_train, y_train, x_test, y_test, 9)
results10=dtc (x_train, y_train, x_test, y_test, 10)

  

До результата 5 все работало хорошо, но после результата 6 я получил эту ошибку:

 Traceback (most recent call last):

  File "<ipython-input-19-60d2876d3701>", line 1, in <module>
    results6=dtc (x_train, y_train, x_test, y_test, 6)

  File "<ipython-input-11-6cb4ba135170>", line 63, in dtc
    graph = pydotplus.graph_from_dot_file(r'tree' str(max_depth) '.dot')

  File "C:XXXlibrerias_anacondapydotplusgraphviz.py", line 314, in graph_from_dot_file
    data = fd.read()

OSError: [Errno 9] Bad file descriptor
  

Я читал, что это ошибка, которая иногда возникает в Windows, но не знаю, почему или как я могу решить.

Извините, если что-то «плохо опубликовано», впервые задаю вопрос. Заранее спасибо всем, кто может оказать какую-либо помощь

Ответ №1:

Мы сталкивались с такого рода проблемами при использовании функции sklearn graph_from_dot_file sklearn. Более конкретно, мы столкнулись с таким поведением, используя Anaconda Python 3.6.5 и пытаясь загрузить файл dot с сетевого диска.

В нашем случае переключение на локальное расположение точек (не на сетевом диске), казалось, решило проблему. Это может быть обходным путем для вашей проблемы.

С уважением,

Комментарии:

1. Спасибо за совет, я пробую программу на своем локальном жестком диске и она отлично работает. Я провел некоторое исследование и, похоже, что сеть не отвечает «достаточно быстро» на запросы и, следовательно, не выполняется должным образом.