Проблема при использовании для l oop с деревом решений scikit-learn - PullRequest
0 голосов
/ 05 января 2020

Я пытаюсь использовать библиотеку дерева scikit-learn для построения деревьев решений, генерируя файлы .dot с помощью функции tree.export_graphviz (). Я хочу преобразовать эти файлы .dot в файлы .pdf с помощью командной строки dot bash.

Мой python код:

from sklearn.datasets import load_iris
iris=load_iris()
from sklearn import tree
for i in range(3,10):
    clf=tree.DecisionTreeClassifier(max_leaf_nodes=i)
    clf=clf.fit(iris.data,iris.target)
    file_name = 'tpsk1-' + str(i) + '.dot'
    tree.export_graphviz(clf,out_file=file_name)

Здесь я пишу для l oop с i от 3 до 10 для экспорта 7-точечных файлов. Но когда я выполнил свой сценарий bash, чтобы преобразовать их в PDF-файлы, произошло нечто странное.

Мой bash сценарий:

for i in 3 4 5 6 7 8 9
do
        dot_file="tpsk1-$i.dot"
        pdf_file="tpsk1-$i.dot"
        dot -Tpdf $dot_file -o $pdf_file
done

Результат:

Error: tpsk1-3.dot: syntax error in line 12 near '�S'
Warning: syntax ambiguity - badly delimited number '.0S' in line 12 of tpsk1-3.dot splits into two tokens
Warning: syntax ambiguity - badly delimited number '3r' in line 49 of tpsk1-3.dot splits into two tokens
Error: tpsk1-4.dot: syntax error in line 16 near 'X'
Warning: syntax ambiguity - badly delimited number '3r' in line 56 of tpsk1-4.dot splits into two tokens
Error: tpsk1-5.dot: syntax error in line 20 near 'ػ0'
Error: tpsk1-6.dot: syntax error in line 24 near '`'
Error: tpsk1-7.dot: syntax error in line 28 near '��'
Warning: syntax ambiguity - badly delimited number '1�' in line 31 of tpsk1-7.dot splits into two tokens
Warning: syntax ambiguity - badly delimited number '3r' in line 68 of tpsk1-7.dot splits into two tokens
Error: tpsk1-8.dot: syntax error in line 32 near '��'
Warning: syntax ambiguity - badly delimited number '0�' in line 32 of tpsk1-8.dot splits into two tokens
Warning: syntax ambiguity - badly delimited number '8z' in line 32 of tpsk1-8.dot splits into two tokens
Error: tpsk1-9.dot: syntax error in line 36 near '�Cb'

Я попытался удалить for l oop, чтобы записать один файл с одной точкой, и он работал просто отлично.

Мой новый скрипт python:

from sklearn.datasets import load_iris
iris=load_iris()
from sklearn import tree
clf=tree.DecisionTreeClassifier(max_leaf_nodes=3)
clf=clf.fit(iris.data,iris.target)
file_name = 'tpsk1-3.dot'
tree.export_graphviz(clf,out_file=file_name)

Моя точка bash команда:

dot -Tpdf tpsk1-3.dot -o tpsk1-3.pdf

Может кто-нибудь, пожалуйста, объясните мне, что случилось, я думаю, что я скучаю по некоторой мудрости позади для l oop в python здесь? Большое спасибо.

1 Ответ

0 голосов
/ 05 января 2020

В вашем примере неверное расширение:

for i in 3 4 5 6 7 8 9
do
        dot_file="tpsk1-$i.dot"
        pdf_file="tpsk1-$i.dot"
        dot -Tpdf $dot_file -o $pdf_file
done

Это должно быть pdf_file="tpsk1-$i.pdf"

...