Визуализация дерева решений в scikit-learn

Python
Вопрос:Я пытаюсь создать простое Дерево решений, используя scikit-learn в Python (я использую Anaconda Ipython Notebook с Python 2.7.3 в ОС Windows) и визуализирую его следующим образом: from pandas import read_csv, DataFrame from sklearn import tree from os import system data = read_csv(%27D_/training.html Y = data.Y X = data.ix[:,"X0":"X33"] dtree = tree.DecisionTreeClassifier(criterion = "entropy") dtree =

Вопрос:

Я пытаюсь создать простое Дерево решений, используя scikit-learn в Python (я использую Anaconda Ipython Notebook с Python 2.7.3 в ОС Windows) и визуализирую его следующим образом:

from pandas import read_csv, DataFrame from sklearn import tree from os import system data = read_csv(‘D:/training.csv’) Y = data.Y X = data.ix[:,»X0″:»X33″] dtree = tree.DecisionTreeClassifier(criterion = «entropy») dtree = dtree.fit(X, Y) dotfile = open(«D:/dtree2.dot», ‘w’) dotfile = tree.export_graphviz(dtree, out_file = dotfile, feature_names = X.columns) dotfile.close() system(«dot -Tpng D:.dot -o D:/dtree2.png»)

Однако я получаю следующую ошибку:

AttributeError: ‘NoneType’ object has no attribute ‘close’

Я использую следующий пост в блоге в качестве ссылки: ссылка в Blogpost

Следующий вопрос stackoverflow, похоже, не работает для меня: Question

Может ли кто-нибудь помочь мне в том, как визуализировать дерево решений в scikit-learn?

Лучший ответ:

sklearn.tree.export_graphviz ничего не возвращает, и поэтому по умолчанию возвращается None.

Выполняя dotfile = tree.export_graphviz(…), вы перезаписываете свой открытый файл-объект, который ранее был назначен dotfile, поэтому вы получаете сообщение об ошибке при попытке закрыть файл (как сейчас None).

Чтобы исправить это, измените свой код на

… dotfile = open(«D:/dtree2.dot», ‘w’) tree.export_graphviz(dtree, out_file = dotfile, feature_names = X.columns) dotfile.close() … Ответ №1

Вот один лайнер для тех, кто использует jupyter и sklearn (18. 2+) Для этого вам даже не нужен matplotlib. Единственным требованием является graphviz

pip install graphviz

чем запуск (согласно коду, о котором идет речь, X является панда DataFrame)

from graphviz import Source from sklearn import tree Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns))

Это отобразит его в формате SVG. Код выше создает объект источника Graphviz Source (source_code – не страшно). Это будет отображаться непосредственно в jupyter.

Некоторые вещи, которые вы, вероятно, будете делать с ним

Отобразите его в jupter:

from IPython.display import SVG graph = Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns)) SVG(graph.pipe(format=’svg’))

Сохранить как png:

graph = Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns)) graph.format = ‘png’ graph.render(‘dtree_render’,view=True)

Получите png-изображение, сохраните его и просмотрите:

graph = Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns)) png_bytes = graph.pipe(format=’png’) with open(‘dtree_pipe.png’,’wb’) as f: f.write(png_bytes) from IPython.display import Image Image(png_bytes)

Если вы собираетесь играть с этой библиотекой, здесь приведены ссылки на примеры и userguide

Ответ №2

Если, как и я, у вас возникла проблема с установкой графика, вы можете визуализировать дерево

  • экспортировать его с помощью export_graphviz, как показано в предыдущих ответах
  • Откройте файл .dot в текстовом редакторе
  • Скопируйте фрагмент кода и вставьте его @webgraphviz.com

Ответ №3

В качестве альтернативы вы можете попробовать использовать pydot для создания файла png из точки:

… tree.export_graphviz(dtreg, out_file=’tree.dot’) #produces dot file import pydot dotfile = StringIO() tree.export_graphviz(dtreg, out_file=dotfile) pydot.graph_from_dot_data(dotfile.getvalue()).write_png(«dtree2.png») … Ответ №4

Вы можете скопировать содержимое файла export_graphviz, и вы можете вставить его на сайт webgraphviz.com.

Вы можете проверить статью о визуализировать дерево решений в Python с помощью графического интерфейса для получения дополнительной информации.

Ответ №5

Если у вас Source.from_file проблемы с захватом исходного.dot, вы также можете использовать Source.from_file следующим образом:

from graphviz import Source from sklearn import tree tree.export_graphviz(dtreg, out_file=’tree.dot’, feature_names=X.columns) Source.from_file(‘tree.dot’) Ответ №6

Я копирую и изменяю часть вашего кода, как показано ниже:

from pandas import read_csv, DataFrame from sklearn import tree from sklearn.tree import DecisionTreeClassifier from os import system data = read_csv(‘D:/training.csv’) Y = data.Y X = data.ix[:,»X0″:»X33″] dtree = tree.DecisionTreeClassifier(criterion = «entropy») dtree = dtree.fit(X, Y)

Убедившись, что у вас есть dtree, что означает, что вышеприведенный код работает хорошо, вы добавляете приведенный ниже код для визуализации дерева решений:

Не забудьте сначала установить graphviz: pip install graphviz

import graphviz from graphviz import Source dot_data = tree.export_graphviz(dtree, out_file=None, feature_names=X.columns) graph = graphviz.Source(dot_data) graph.render(«name of file»,view = True)

Я попытался с моими данными, визуализация работала хорошо, и я сразу же получил PDF файл.

Ответ №7

Следующее также отлично работает:

from sklearn.datasets import load_iris iris = load_iris() # Model (can also use single decision tree) from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators=10) # Train model.fit(iris.data, iris.target) # Extract single tree estimator = model.estimators_[5] from sklearn.tree import export_graphviz # Export as dot file export_graphviz(estimator, out_file=’tree.dot’, feature_names = iris.feature_names, class_names = iris.target_names, rounded = True, proportion = False, precision = 2, filled = True) # Convert to png using system command (requires Graphviz) from subprocess import call call([‘dot’, ‘-Tpng’, ‘tree.dot’, ‘-o’, ‘tree.png’, ‘-Gdpi=600’]) # Display in jupyter notebook from IPython.display import Image Image(filename = ‘tree.png’)

enter image description here

Вы можете найти источник здесь

Ответ №8

Простой способ, основанный здесь с pydotplus (необходимо установить graphviz):

from IPython.display import Image from sklearn import tree import pydotplus # installing pyparsing maybe needed

dot_data = tree.export_graphviz(best_model, out_file=None, feature_names = X.columns) graph = pydotplus.graph_from_dot_data(dot_data) Image(graph.create_png())

Оцените статью
Добавить комментарий