Note

분류 - Decision Tree (2) 본문

Machine Learning/Classification

분류 - Decision Tree (2)

알 수 없는 사용자 2021. 5. 20. 01:24
728x90

분석에 사용할 데이터는 기존에 계속 사용해오던 iris 데이터를 사용한다.

항상 시작은 필요한 라이브러리를 불러오는 것부터 시작이다. !pip install garphviz는 시각화를 위한 프로그램이다.

분류 예측 성능을 위해서 모델을 학습시킬 수 있는 학습 데이터와 모델 성능 평가를 위한 테스트 데이터로 나눈다. 그 후에 의사결정나무를 위한 객체를 생성하고 .fit을 사용해서 학습시킨다.

test_size 옵션은 데이터를 어떠한 비율로 나눌 것인가를 위한 수치이다. 옵션 수치를 변경함에 따라 이후에 나올 결과 데이터에 어느 정도 영향을 미친다.

export_graphviz()에서 max_depth = 특정 숫자나 min_sample_split = 특정 숫자, min_sample_leaf = 특정 숫자 옵션을 주게 되면 그 결과 값과 트리 모델이 달라진다.

export_graphviz()의 호출 결과로 out_file로 지정된 tree.dot 파일을 생성하고 생성된 tree.dot 파일을 Graphviz로 읽어서 시각화를 한 것이다. with open은 파일을 읽는다는 코드이고 graphviz의 Source 메소드를 사용해서 dot_graph 읽어오는 것이다. 

impurity=True라는 옵션은 불순도(= 정보 균일도)를 나타낼 것인가에 대한 옵션이다. 밑에 박스를 보면 gini = 0.663의 형태로 나타나져 있고 False 옵션을 주면 사라진다. filled=True는 박스 안의 색을 채울 것인가에 대한 옵션이다.

위 코드를 실행하면 아래와 같은 그림으로 출력이 된다. 그림이 커서 일부만을 가져왔다. 

decision tree의 일부
False 옵션

분류하는데 사용된 피쳐들 중 가장 중요한 것이 무엇인지 시각화된 그래프를 통해 알 수 있다.

3개의 클래스를 2개의 피쳐로 나눠서 시각화한 것이다.

n_features : 피쳐의 개수, 독립 변수의 수(붓꽃의 특징 2가지)

n_redundant : 독립변수 중 종속변수의 수(여기서는 해당사항이 없으므로 0)

n_informative : 독립변수 중 서로 독립인 성분의 수(독립변수(피처)끼리 영향을 주지 않기 때문에 피처 개수와 같이 설정)

n_classes : 종속변수의 클래스 수(붓꽃의 종류 수 : 3가지)

n_clusters_per_class : 클래스당 클러스터(군집)의 수 (붓꽃 각각의 클래스에 따라서 군집화, 클래스가 1개씩 표현하기 위해 1로 설정)

cmap ='색상 옵션' rainbow 이외에 viridis, summer_r 등 다양한 옵션이 있다. 구글링을 통해 원하는 색상 옵션을 찾으면 된다.

edgecolor='k'는 그래프 엣지에 관련된 옵션 같은데 막대그래프에서는 모서리가 없다고 한다. 여기서는 없어도 실행이 가능하다.

decision tree 범위에 대해서 함수를 설정하고 완전한 분류를 위한 과적합된 모델을 시각화한 코드이다.

과적합 모델

위 그림을 보면 범위 제약에 대해서 옵션을 걸지 않았기 때문에 완전히 과적합된 모델이다. 이 모델은 성능은 좋게 나오겠지만 새로운 데이터가 들어왔을 때는 예측 정확도가 현저히 떨어진다.

min_samples_leaf=6이라는 옵션을 걸어서 다시 실행시키면,

일반화 모델

과적합 모델보다는 현재 분류한 정확도는 떨어지지만 일반화가 잘 된 모델이라고 할 수 있다. 새로운 데이터가 들어왔을 때 과적합 모델모다 예측 정확도는 좋을 것이다.

'Machine Learning > Classification' 카테고리의 다른 글

보팅 (Voting)  (0) 2021.05.24
앙상블 학습  (0) 2021.05.24
분류 - Decision Tree (1)  (0) 2021.05.20
분류 성능 평가 지표  (0) 2021.05.13
iris 품종 예측 - scikit learn  (0) 2021.05.06
Comments