복붙노트

[PYTHON] Scikit-Learn에서 의사 결정 트리 시각화

PYTHON

Scikit-Learn에서 의사 결정 트리 시각화

Python에서 scikit-learn을 사용하여 간단한 의사 결정 트리를 디자인하려고합니다 (Windows OS에서 Python 2.7.3으로 Anaconda의 Ipython Notebook을 사용하고 있습니다). 다음과 같이 시각화합니다.

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 link

다음 stackoverflow 질문뿐만 아니라 나를 위해 작동하지 않는 것 : 질문

누군가가 scikit-learn에서 의사 결정 트리를 시각화하는 방법을 알려줄 수 있습니까?

해결법

  1. ==============================

    1.sklearn.tree.export_graphviz는 아무것도 반환하지 않으므로 기본적으로 None을 반환합니다.

    sklearn.tree.export_graphviz는 아무것도 반환하지 않으므로 기본적으로 None을 반환합니다.

    dotfile = tree.export_graphviz (...)를 사용하면 이전에 dotfile에 할당되었던 열려있는 파일 객체를 덮어 쓰므로 파일을 닫으려고 할 때 오류가 발생합니다 (이제는 없음이므로).

    코드를 수정하여

    ...
    dotfile = open("D:/dtree2.dot", 'w')
    tree.export_graphviz(dtree, out_file = dotfile, feature_names = X.columns)
    dotfile.close()
    ...
    
  2. ==============================

    2.나 같은, graphviz 설치 문제가 있다면, 당신은 tree를 시각화 할 수있다.

    나 같은, graphviz 설치 문제가 있다면, 당신은 tree를 시각화 할 수있다.

  3. ==============================

    3.jupyter와 sklearn (18.2+)을 사용하는 사람들을위한 하나의 라이너가 있습니다. 매트 플롯을 필요로하지 않습니다. graphviz만이 요구 사항입니다.

    jupyter와 sklearn (18.2+)을 사용하는 사람들을위한 하나의 라이너가 있습니다. 매트 플롯을 필요로하지 않습니다. graphviz만이 요구 사항입니다.

    pip install graphviz
    

    실행보다 (문제의 코드에 따르면 X는 판다 데이터 프레임 임)

    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에서 직접 렌더링됩니다.

    당신이 그걸로 할 가능성이있는 것들

    목성에 표시 :

    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)
    

    그 라이브러리를 가지고 놀고 싶다면 예제와 사용자 가이드에 대한 링크가 있습니다.

  4. ==============================

    4.또는 pydot를 사용하여 점에서 png 파일을 생성 해보십시오.

    또는 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")
    ...
    
  5. ==============================

    5.export_graphviz 파일의 내용을 복사 할 수 있으며 webgraphviz.com 사이트에 붙여 넣을 수 있습니다.

    export_graphviz 파일의 내용을 복사 할 수 있으며 webgraphviz.com 사이트에 붙여 넣을 수 있습니다.

    자세한 정보는 Python에서 graphviz를 사용하여 의사 결정 트리를 시각화하는 방법에 대한 기사를 참조하십시오.

  6. ==============================

    6.원본 .dot을 직접 가져 오는 문제가 발생하면 직접 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')
    
  7. from https://stackoverflow.com/questions/27817994/visualizing-decision-tree-in-scikit-learn by cc-by-sa and MIT license