본문 바로가기

Study/Python

Python | 의사결정나무 Decision Tree

의사결정나무란? 입력값에 대한 예측값을 나무 형태로 나타내주는 모형으로, 분류와 추정을 수행하는 분석 방법이다.

 

의사결정나무 모형

  1. 일련의 독립변수들을 활용하여 분류를 하거나 예측을 수행하는 기법
  2. 최종 결과물이 '일련의 규칙들'로 표현됨
  3. Decision Trees 또는 Trees라고 불림

 

의사결정나무의 적용 분야

  • 의사결정나무는 분류 또는 예측을 목적으로 하는 어떤 경우에도 사용 가능
  • 분석의 정확도보다는 분석과정의 설명이 필요한 경우에 더 유용하게 사용

 

의사결정나무의 2가지 기본 아이디어

1. 반복적 분할(Recursive partitioning)

  • 목표변수 측면에서 부모 노드보다 더 순수도(purity)가 높은 자식 노드들이 되도록 데이터를 반복적으로 분할
  • 레코드들을 두 부분으로 반복해서 잘라 세분된 영역 내의 동질성이 최대가 되도록 함(2진분할)
  • 계속 잘라나가다 보면 모든 학습용 데이터를 100%정확하게 분류해 낼 수 있을 만큼 세분화해 나갈 수 있음

 

2. 분류나무의 가지치기(Pruning the tree)

출처  https://link.springer.com/referenceworkentry/10.1007/978-1-4899-7687-1_66

  • 반복적 분할을 반복하다 보면 과적합화는 피할 수 없이 나타나게 됨
  • 과적합화를 피하기 위해 불필요한 가지(정보 제공이 적은 가지)를 제거
  • 가지치기를 통해 규칙들을 단순화하고 일반화시키는 작업이 이루어지게 됨

 

의사결정나무의 장단점

1. 장점

  • 해석의 용이성 : 목표변수를 설명하기에 더 중요한 독립변수 파악이 쉬움
  • 교호효과의 해석 : 두 개 이상의 변수가 결합하여 목표 변수에 어떻게 영향을 주는지 쉽게 알 수 있음
  • 비모수적 모형 : 선형성이나 정규성 또는 등분산성 등의 가정을 필요로 하지 않는 비모수적인 방법
  • 모델의 생성 속도가 빠름 : 계산 비용이 적음

2. 단점 

  • 비연속성 : 연속성 변수를 구간화 시켜서 비연속 적으로 처리하므로 분리 경계점 부근에서 예측 오류가 클 수 있음
  • 선형성 또는 주 효과의 결여 : 각각의 변수의 독립적 영향력을 해석할 수 없음
  • 비안정성(과적합) 
    • 훈력 데이터 집합에만 의존하여 새로운 자료의 예측에서 불안정할 가능성이 높음
    • 테스트 데이터 집합에 의한 평가가 필요
    • 씨드를 설정해주지 않으면 방금 전의 결과도 다시 보기 어려움(휘발성)

 

3. 과적합화의 해소 방법

출처  https://vitalflux.com/overfitting-underfitting-concepts-interview-questions/

  • 가지치기 : 적당한 수준에서 나무의 성장을 중단시킴
  • 랜덤 포레스트

 

의사결정나무의 선언

#df = dataframe을 선언했다고 가정
train_cols = df.columns[:-1]
X = df[train_cols]
y = df['target']

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,stratify=y,random_state=10)

from sklearn.tree import DecisionTreeClassifier
#트리 모형 생성(기본옵션)
model1 = DecisionTreeClassifier(splitter='best', random_state=0)
model1.fit(X_train,y_train)

pred = model1.predict(X_test)
print('학습용:',model1.score(X_train,y_train))
print('검증용:',model1.score(X_test,y_test))

출처

 

'Study > Python' 카테고리의 다른 글

Python | K-NN vs. K-Means  (0) 2022.05.19
Python | 의사결정나무의 파라미터  (0) 2022.05.05
Python | 회귀분석  (0) 2022.03.23
Python | 데이터 전처리  (0) 2022.03.23
Python | Dacon Lv3 | CV & LGBM  (0) 2022.03.21