Czy istnieje sposób na wydrukowanie wyszkolonego drzewa decyzyjnego w SCIKIT-Dowiedz się? Chcę trenować drzewo decyzyjne dla mojej pracy i chcę umieścić obraz drzewa w pracy. Czy to jest możliwe?

14
Jack Twain 13 sierpień 2014, 01:53

3 odpowiedzi

Najlepsza odpowiedź

Istnieje metodę do wyeksportowania do formatu Graph_viz: http: // scikit-learn.org/stable/modules/generated/sklearn.tree.Export_graphviz.html.

Z powyższych dokumentów online:

>>> from sklearn.datasets import load_iris
>>> from sklearn import tree
>>>
>>> clf = tree.DecisionTreeClassifier()
>>> iris = load_iris()
>>>
>>> clf = clf.fit(iris.data, iris.target)
>>> tree.export_graphviz(clf,
...     out_file='tree.dot')    

Następnie możesz załadować to za pomocą Wykresu Viz, lub jeśli masz zainstalowany Pidot, możesz to zrobić więcej bezpośrednio: http://scikiit-learn.org/stable/modules/tree.html

>>> from sklearn.externals.six import StringIO  
>>> import pydot 
>>> dot_data = StringIO() 
>>> tree.export_graphviz(clf, out_file=dot_data) 
>>> graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
>>> graph.write_pdf("iris.pdf") 

Produkuje SVG, nie można go wyświetlić tutaj, więc musisz podążać za linkiem: http://scikit-learn.org/stable/_images/iris.svg.

Aktualizuj

Wygląda na to, że nastąpiła zmiana w zachowaniu, odkąd po raz pierwszy odpowiedziałem na to pytanie, a teraz zwraca list i stąd otrzymasz ten błąd:

AttributeError: 'list' object has no attribute 'write_pdf'

Po pierwsze, gdy to widzisz, warto już drukować obiekt i sprawdzenie obiektu, a najprawdopodobniej jest to pierwszy obiekt:

graph[0].write_pdf("iris.pdf")

Dzięki @nickbraunagel dla komentarza

15
EdChum 11 marzec 2018, 22:24

Chociaż spóźniam się do gry, poniższa instrukcja może być przydatna dla innych, którzy chcą wyświetlać wyjście drzewa decyzyjnego:

Zainstaluj niezbędne moduły:

  1. Zainstaluj graphviz. Użyłem opakowania Instalacja Condada Tutaj (Zalecany nad pip install graphviz jako pip Install nie Dołącz aktualny graphfiz Executables)
  2. Zainstaluj pydot przez PIP (pip install pydot)
  3. Dodaj katalog folderów Graphviz zawierający pliki .exe (np. Dot.exe) do ścieżki zmiennej środowiskowej
  4. Uruchom powyżej (Uwaga: graph to list zawierająca obiekt pydot.Dot):

from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.externals.six import StringIO  
import pydot 

clf = tree.DecisionTreeClassifier()
iris = load_iris()
clf = clf.fit(iris.data, iris.target)

dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 

graph[0].write_pdf("iris.pdf")  # must access graph's first element

Teraz znajdziesz domyślnym katalogu "IRIS.PDF"

7
NickBraunagel 27 marzec 2018, 19:25

Istnieją 4 metody, o których wiadomo, że spiskowanie drzewa decyzyjnego SCIKIT-Learn:

  • Wydrukuj reprezentację tekstu drzewa za pomocą metody sklearn.tree.export_text
  • Spisek z metodą sklearn.tree.plot_tree (matplotlib potrzebna)
  • Spisek z metodą sklearn.tree.export_graphviz (graphviz potrzebna)
  • Działka z pakietem dtreeviz (dtreeviz i graphviz

Najprostszym jest eksport do reprezentacji tekstowej. Przykładowe drzewo decyzyjne będzie wyglądało:

|--- feature_2 <= 2.45
|   |--- class: 0
|--- feature_2 >  2.45
|   |--- feature_3 <= 1.75
|   |   |--- feature_2 <= 4.95
|   |   |   |--- feature_3 <= 1.65
|   |   |   |   |--- class: 1
|   |   |   |--- feature_3 >  1.65
|   |   |   |   |--- class: 2
|   |   |--- feature_2 >  4.95
|   |   |   |--- feature_3 <= 1.55
|   |   |   |   |--- class: 2
|   |   |   |--- feature_3 >  1.55
|   |   |   |   |--- feature_0 <= 6.95
|   |   |   |   |   |--- class: 1
|   |   |   |   |--- feature_0 >  6.95
|   |   |   |   |   |--- class: 2
|   |--- feature_3 >  1.75
|   |   |--- feature_2 <= 4.85
|   |   |   |--- feature_1 <= 3.10
|   |   |   |   |--- class: 2
|   |   |   |--- feature_1 >  3.10
|   |   |   |   |--- class: 1
|   |   |--- feature_2 >  4.85
|   |   |   |--- class: 2

Następnie jeśli masz zainstalowany matplotlib, możesz wykresować z sklearn.tree.plot_tree:

tree.plot_tree(clf) # the clf is your decision tree model

Przykładowy wyjście jest podobny do tego, co dostaniesz z export_graphviz: Wizualizacja decyzyjna SKLEARN

Możesz również spróbować dtreeviz pakiet. Daje ci więcej informacji. Przykład:

dtreeviz example decision tree

Można znaleźć porównanie różnych wizualizacji drzewa decyzyjnego Sklearn z fragmentów kodu w tym blogu Post: Link.

0
pplonski 22 czerwiec 2020, 13:08