실습 코드가 class로 정의되었다는 점을 빼고는, 사실 내용 자체는 크게
어렵지는 않았다. 학부, 대학원, 현업 때의 경험이 다 있으니까.
수학적으로 제대로 이해하려면 별도의 공부는 필요하지만, 일단은 그런 부분은 잠시 놓아두기로 했다.

01. 의사 결정 나무의 정의 및 특징

  • 데이터의 feature를 기준으로 조건 분기를 반복하여, 최종적으로 예측 값을 도출하는 트리 기반의 지도학습 알고리즘이다.
  • 분류(Classification)와 회귀(Regression) 모두에 사용할 수 있으며, 사람의 '의사결정 과정'을 모사하는 구조를 가진다.

02. 트리를 분할하는 기준 - 엔트로피

  • 정보 이득(Information Gain)
    • 엔트로피(entropy)라는 개념을 기반으로 함
    • 분할 전후의 불순도(entropy) 감소량을 계산함
    • ID3 알고리즘이 사용됨
  • 엔트로피는 무엇일까?
    • 모든 클래스가 골고루 섞여있으면 엔트로피가 높고, 하나의 클래스로만
      이뤄져 있으면 엔트로피가 0임
Entropy(S)=kpklog2(pk)Entropy(S) = - \sum_{k} p_k \log_2(p_k)
  • 정보 이득 수식
    IG(S,A)=Entropy(S)vValues(A)SvSEntropy(Sv)IG(S, A) = Entropy(S) - \sum_{v \in Values(A)} \frac{|S_v|}{|S|} \cdot Entropy(S_v)
    • SS : 전체 데이터 셋
    • AA : 분할에 사용된 feature
    • SvS_{v} : feature A값이 v인 하위 그룹

03. 트리를 분할하는 기준 - 지니계수

  • 지니 지수(Gini Index)는 한 노드에서 임의로 샘플을 뽑을 때 다른 클래스일 확률
  • CART 알고리즘에서 사용함 (scikit-learn 기본 설정)
  • 아래는 지니 지수(Gini Impurity) 수식임
    Gini(S)=1k=1cpk2Gini(S) = 1 - \sum_{k=1}^{c} p_k^2
    • Gini(S)Gini(S) = 집합 S의 지니 불순도
    • CC = 클래스의 개수
    • pkp_k = 클래스의 비율

04. DecisionTree에 적용한다면?

  • scikit-learn에서 DecisionTreeClassifier와 DecisionTreeRegressor는 내부적으로는 같은 CART(Classification And Regression Trees) 알고리즘을 기반으로 작동
  • 분기 기준(split criterion)목표(loss function)가 서로 다름

05. DecisionTree의 특징

  • 빠르고 편리하지만, DecisionTree는 과적합(Overfitting)의 가능성이
    있음
    • Overfitting은 '학습(train)' 데이터에서는 모델이 잘 맞는데, '테스트(test)'
      데이터에서는 모델이 잘 맞지 않는 경우를 의미함
    • 반대로 Underfitting은 '학습(train)'데이터에서 모델이 너무 맞지 않는
      경우를 지칭함
  • DecisionTree 내용 요약
구분 DecisionTreeClassifier DecisionTreeRegressor
용도 분류 (Classification) 회귀 (Regression)
분할 기준 지니 지수(Gini) 또는 정보 이득(Entropy) 제곱오차(Squared Error), MAE 등
리프 노드 값 클래스 확률 또는 최빈 클래스 평균값 (또는 중앙값)
장점 - 해석이 쉬움
- 전처리 거의 불필요
- 범주형/수치형 모두 처리 가능
- 비선형 회귀 가능
- 이상치(outlier)에 어느 정도 강건
- 해석 용이
단점 - 과적합(overfitting) 우려
- 작은 데이터 변화에 민감
- 일반화 성능 낮을 수 있음
- 예측값이 불연속적일 수 있음
- 리프 노드 수가 많아질 수 있음
- 과적합 발생 가능
profile
2025화이팅!

0개의 댓글