관리 메뉴

DeseoDeSeo

[ Machine Learning ] ex04_mushroom_part.02 본문

Python

[ Machine Learning ] ex04_mushroom_part.02

deseodeseo 2023. 8. 31. 18:08
Decision Tree ( 의사결정 나무 ) 과대적합 제어

 

하이퍼 파라미터  설명  
max_depth
(트리의 최대 길이 )
값이 클수록 모델의 복잡도 상승  
max_leaf_nodes
(리프 노드의 최대 개수)
개수가 多
-> 깊이가 깊어짐(= 분할되는 노드 증가)
값이 클수록 모델의 복잡도 상승
miin_samples_split
(노드를 분할하기 위한 최소 샘플 수)
작게 설정될수록 분할되는 노드 증가,  복잡도 상승  
min_samples_leaf
(리프 노드가 가져야할 최소 샘플 수)
작게 설정될수록 분할되는 노드 증가,  복잡도 상승 값이 클수록 세분화 된 것.

<  과대적합 제어 후 시각화 확인  >

 

모델의 깊이를 설정하는 매개변수 연결 : max_depth
tree_model2 = DecisionTreeClassifier(max_depth=3)
tree_model2.fit(x_train, y_train)

교차검증 진행해보기,  횟수는 5번, tree_model2, train 데이터로 입력
from sklearn.model_selection import cross_val_score
cross_val_score(tree_model2, x_train, y_train, cv=5)
print('교차검증 결과: ',cross_val_score(tree_model2,x_train,y_train,cv=5))
print('교차검증 평균: ',cross_val_score(tree_model2,x_train,y_train,cv=5).mean())

현재 버섯 분류하는 상황에서는 제어할 필요가 없지만

다른 데이터를 활용해 학습을 진행할때에는 일반적으로

끝까지 학습하게, 규제하지 않으면 과대 적합에 걸릴 확률이 높음,

시각화
from sklearn.tree import export_graphviz
export_graphviz(tree_model2, # 추출할 모델 
                out_file='tree.dot',  # 저장 경로 및 파일명
               class_names=['독','식용'], # 클래스 이름 표현 설정
               feature_names=x_one_hot.columns, # 컬럼명 이름 표현 설정
               impurity=False, 
               filled=True) # 색상을 채움.
# tree.dot 불러오면서 시각화(그래프화)
import graphviz
# 파일 다루는 파이썬 코드
with open('tree.dot', encoding ='UTF8') as f:
    dot_graph =f.read()
    
display(graphviz.Source(dot_graph))