파이썬으로 결정 트리를 시각화 할 때까지

집 PC 환경에서 scikit-learn의 DecisionTreeClassfier에서 결정 트리를 시각화하기 전에 한 일을 설명합니다.

전제



OS: Windows 10 Home Edition
Anaconda 3.7 도입 완료.

도입 절차


  • graphviz 설치
    1) "conda install graphviz"를 실행한다.
    2) 환경 변수 PATH에 "Anaconda 설치 폴더\Library\bin\graphviz"를 추가합니다.
  • pydotplus 설치
    1) "conda install pydotplus"를 실행한다.
  • python-graphviz 설치
    1) "conda install python-graphviz"를 실행한다.

  • 각각 conda install 명령이 비정상적으로 종료되지 않았는지 확인합니다.
    방법으로는
    · conda install 명령을 실행하는 동안 오류 메시지가 나타나지 않는지 육안으로 확인합니다.
    · "echo %ERRORLEVEL %"의 실행 결과가 0인지 확인하십시오.
    · "conda list 패키지 이름"을 실행하여 설치할 패키지의 이름이 출력되는지 확인하십시오.
    같은 방법이 있는지 생각합니다.

    샘플



    샘플 코드


    import numpy as np
    import pandas as pd
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.tree import export_graphviz
    import pydotplus
    
    df = pd.read_csv( 'D:/python/testdata.csv' )
    
    src = df.drop( 'C', axis='columns' )
    trgt = df['C']
    
    clf = DecisionTreeClassifier( random_state = 0 )
    clf.fit( src, trgt )
    
    dot_data = export_graphviz(clf,
                    feature_names=src.columns, 
                    class_names=['T','F'], 
                    filled=True, 
                    rounded=True)
    
    graph = pydotplus.graph_from_dot_data( dot_data )
    
    graph.write_png( 'D:/python/tree.png' )
    

    테스트 데이터 (testdata.csv)


    A,B,C
    -4,-8,T
    -9,7,F
    -1,3,F
    2,1,T
    5,-1,T
    10,5,T
    -8,-6,F
    -9,-2,F
    -8,-2,F
    3,1,T
    5,-6,T
    4,-7,T
    9,9,F
    9,5,T
    -5,6,F
    5,9,F
    9,3,T
    2,-5,T
    8,10,F
    0,-6,T
    

    ※A>B의 경우 C='T', A

    결과 그래프





    덧붙여서, 지금까지의 환경 구축 내용이라면, 컬럼명을 일본어로 한 경우에 문자화할 수 있습니다.
    위의 예에서 A⇒설명 변수 1, B⇒설명 변수 2, C⇒목적 변수로서 같은 처리를 실행시킨 결과는 다음과 같습니다.


    그래프에서 일본어를 표시하려면 ...?



    ※scikit-learn을 업데이트하면 원래대로 돌아갈 것 같은 방법입니다만…

    "Anaconda 설치 폴더\pkgs\scikit-learn-0.21.2-py37h6288b17_0\Lib\site-packages\sklearn\tree\export.py"에서 하드 코딩된 글꼴 이름을 변경하는 방법을 사용할 수 있습니다. .

    head 메소드내에는 이하의 기술이 2개소 있습니다.
    fontname=helvetica

    이 fontname=로 지정된 폰트명을 일본어 폰트명으로 변경하면 잘 됩니다.
    다음 그래프는 fontname=Meiryo로 변경한 후 그래프를 작성한 결과입니다.
    위의 그래프에서는 깨진 부분이 올바르게 표시되어 있습니다.


    다만, 이 방법이라면 폰트명에 공백이 포함되면 안 되고, 예를 들어 fontname=Meiryo UI라고 하면 처리가 이상 종료합니다.

    참고 사이트



    · Python3에서 scikit-learn 결정 트리를 일본어 글꼴로 이미지 출력하는 방법 요약
    · Graphviz 명령으로 일본어가 깨져서 곤란했다 (windows10)

    관련 링크



    ・graphviz 공식 사이트
    htps //w w. g 등 ph ゔ ... rg /

    · pydotplus 공식 사이트
    htps : // py 피. 오 rg/p 로지ぇct/py도 tpぅs/

    좋은 웹페이지 즐겨찾기