과적합 / 일반화

강민정·2023년 7월 7일
0

Machine Learning

목록 보기
5/10

Generalization (일반화)

  • 모델이 학습한 패턴과 특징을 이용하여 새로운 데이터에 대한 예측을 수행하는 능력
  • 학습 데이터에만 너무 치중되지 않고, 새로운 데이터에도 적용할 수 있는 능력
  • 모델이 훈련 데이터셋으로 평가한 결과와 테스트(검증) 데이터셋을로 평가한 결과의 차이가 거의 없고 좋은 평가지표를 보여줌

Overfitting (과대적합)

  • 모델이 학습 데이터에 지나치게 맞춰져서 새로운 데이터에 대한 일반화 성능이 저하되는 현상
  • 학습 데이터에 존재하는 노이즈와 이상치에 과도하게 반응하는 경우에 자주 발생
  • 모델은 이러한 노이즈를 학습에 포함시켜서 실제 패턴보다 복잡한 구조를 만들게 되어, 새로운 데이터에서는 성능이 저하
  • train 정확도는 높지만 val 정확도는 낮음
    • 원인:
      • 모델 복잡성: 모델이 학습 데이터에 지나치게 맞춰져서 데이터의 작은 변동성까지 학습하는 경우 발생
      • 데이터 부족: 학습에 사용되는 데이터 양이 적거나 다양성이 부족한 경우에 과대적합이 발생
    • 해결방법:
      • 데이터 확보 및 다양성 확보: 더 많은 데이터를 수집하고, 데이터셋을 다양하게 구성하여 모델이 데이터의 다양성을 학습할 수 있도록 함
      • 규제(Regularization) 적용: L1, L2 규제와 드롭아웃(Dropout) 등의 기법을 사용하여 모델의 복잡성을 제어
      • 교차 검증(Cross-validation): 데이터셋을 여러 개의 폴드(fold)로 나누어 교차 검증을 수행하여 모델의 일반화 성능을 평가
      • 모델을 단순하게 만든다.

Underfitting (과소적합)

  • 모델이 학습 데이터의 패턴을 충분히 학습하지 못하여, 학습 데이터와 새로운 데이터에서 모두 성능이 저조한 상태

  • 모델이 데이터의 복잡성을 충분히 파악하지 못하고 간단한 모델로 너무 단순하게 표현되는 경우

  • train, val 정확도 모두 낮음


    하이퍼파라미터

  • 모델의 성능에 영향을 끼치는 파라미터 값으로 모델 생성시 사람이 직접 지정해 주는 값(파라미터)

  • 하이퍼파라미터 튜닝 : 모델의 성능을 가장 높일 수 있는 하이퍼파라미터를 찾는 작업

  • val 값이 가장 좋으면서, train 값과 val 값의 차이가 가장 작은 값

  • 원인:

    • 모델 단순성: 모델이 데이터의 다양성과 복잡성을 충분히 학습하지 못하고 너무 단순한 구조를 가질 때 발생
    • 데이터 부족: 학습에 사용되는 데이터 양이 너무 적어서 모델이 데이터의 패턴을 충분히 학습하지 못하는 경우
  • 해결방법:

    • 모델 복잡성 증가: 모델의 구조를 더 복잡하게 만들거나, 더 많은 학습 데이터를 사용하여 모델이 데이터의 다양성과 변동성을 잘 파악하도록 함
    • 특성 공학: 데이터의 특성을 더 잘 나타낼 수 있는 새로운 특성을 만들어 모델에 추가
    • 복잡한 모델로 변경: 다른 알고리즘 또는규제 하이퍼파라미터를 사용하여 모델의 성능을 향상

graphviz를 이용해 시각화(추론 과정)

from sklearn.tree import export_graphviz
from graphviz import Source

src = export_graphviz(tree_1, # 모델
                       feature_names=data['feature_names'],
                       class_names=data['target_names'], # class 추가
                       rounded=True, # 모서리 원형으로 
                       filled=True # 배경색
                     )
graph = Source(src) # graph 만들어주는
graph

💡 -------현재 노드를 분리하기 위한 질문---------
worst concave points <= 106.1
------------현재 노드(박스)의 상태-------------
gini = 0.081 # 클래스별로 섞은 비율을 점수화 → 불순도율(gini: 0 ~ 0.5)
samples = 259 # 총 데이터 개수
value = [11, 248] # 클래스별 데이터 개수 (0:11, 1: 248)
class = benign # 다수 클래스의 class name

  • 색이 진할 수록 한쪽으로 치우친것

Decision Tree 복잡도 제어(규제 파라미터)

  • 노드가 너무 많이 만들어 지는 것
  • Overfitting 발생한 모델 = 복잡한 모델
  • 모델의 복잡도 관련 주요 하이퍼파라미터
    • max_depth: 트리의 최대 깊이
    • max_leaf_nodes : 리프노드 개수
    • min_samples_leaf : leaf 노드가 되기위한 최소 샘플수

0개의 댓글