Note
분류 - Decision Tree (2) 본문
분석에 사용할 데이터는 기존에 계속 사용해오던 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는 박스 안의 색을 채울 것인가에 대한 옵션이다.
위 코드를 실행하면 아래와 같은 그림으로 출력이 된다. 그림이 커서 일부만을 가져왔다.
분류하는데 사용된 피쳐들 중 가장 중요한 것이 무엇인지 시각화된 그래프를 통해 알 수 있다.
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 |