WIDA/DACON 분류-회귀

[DACON/김민혜] 분류 모델 알아보기

알 수 없는 사용자 2023. 3. 22. 00:47

분류 classification


  • 지도학습의 대표적인 유형
    • 지도학습: 명시적인 정답이 있는 데이터가 주어진 상태에서 학습하는 머신러닝 방식
  • 학습 데이터로 주어진 데이터의 피처와 레이블값(결정 값, 클래스 값)을 머신러닝 알고리즘으로 학습해 모델 생성
  • 생성된 모델에 새로운 데이터 값이 주어졌을 때 미지의 레이블 값을 예측하는 것
    ⇒ 기존 데이터가 어떤 레이블에 속하는지 패턴을 알고리즘으로 인지한 뒤, 새롭게 관측된 데이터에 대한 레이블을 판별하는 것.
  • 출력하고자 하는 값이 카테고리값(이산형)인 경우
  • 독립변수값이 주어졌을 때 그 값과 가장 연관성이 큰 종속변수값(클래스)을 예측하는 문제
    • 즉, 어떤 표본에 대한 데이터가 주어졌을 때 그 표본이 어떤 카테고리 혹은 클래스에 속하는지
      • ex. 이미지를 컴퓨터에 입력했을 때 “개”인지 “고양이”인지 판별하는 문제

 

결정 트리 Decision Tree


개념

: 데이터에 있는 규칙을 학습을 통해 자동으로 찾아내 트리 기반으로 분류 규칙을 만드는 것.

  • ML 알고리즘 중 직관적으로 이해하기 쉬운 알고리즘
  • 데이터의 어떤 기준을 바탕으로 규칙을 만들어야 가장 효율적인 분류가 될 것인지가 관건

  • 규칙 노드(Decision Node)에서 규칙에 따라 분할됨. 규칙 조건을 나타냄
  • 서브 트리(Sub Tree)는 새로운 규칙 조건마다 생성됨.
  • 계속되는 규칙에 따라 노드가 분할되며 최종적으로 리프 노드(Leaf Node)에서는 결정된 클래스 값을 가지게 됨
  • 결정 트리를 구성할 때 한쪽으로 치우치지 않게 적절히 분할해야 하며 가지치기를 통해 관련성이 적은 서브 트리를 제거 or 트리의 깊이에 제한을 두는 등의 방식으로 과적합이 일어나지 않을 적절한 트리 만들어야 함
  • 많은 규칙이 있다는 것 = 분류를 결정하는 방식이 더욱 복잡해짐
    ⇒ 트리의 깊이가 깊어질수록 결정 트리의 예측 성능이 저하될 가능성이 높음
  • 트리를 효율적으로 분할하기 위해 최대한 균일한 데이터 세트를 구성하는 것이 중요
    • 균일도 측정방법
      1. 정보 이득: 엔트로피(주어진 데이터 집합의 혼잡도) 개념 기반. 서로 다른 값이 섞여 있으면 높고, 같은 값이 섞여 있으면 낮음.
        • 정보 이득이 높은 속성을 기준으로 분할
        • 정보 이득 지수 = 1-엔트로피 지수
      2. 지니 계수: 0이 가장 평등하며 1로 갈수록 불평등. 데이터가 다양한 값을 가질수록 평등, 특정 값으로 쏠릴 때는 불평등한 값.
        • 다양성이 낮을수록 균일도가 높다는 의미이므로 1로 갈수록 균일도가 높으며, 지니 계수가 높은 속성을 기준으로 분할

 

특징

  • 장점
    • ‘균일도’라는 룰을 기반으로 하고 있어 알고리즘이 쉽고 직관적임.
    • 정보의 균일도만 신경쓰면 되므로 각 피처의 스케일링과 정규화 같은 전처리 작업 불필요
  • 단점
    • 과적합으로 떨어지는 정확도
    • 학습 데이터 기반 모델의 정확도를 높이기 위해 계속해서 조건을 추가하며 트리 깊이가 깊어지고, 결과적으로 복잡한 학습 모델이 됨
  • 시각화는 사이킷런에서 제공하는 Graphviz 패키지 사용

 

앙상블 학습 Ensemble Learning


개념

DEF) 여러 개의 분류기(Classifier)를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법

  • 목표: 다양한 분류기의 예측 결과를 결합함으로써 단일 분류기보다 신뢰성이 높은 예측값을 얻는 것 (집단지성 느낌)
  • 대부분의 정형 데이터를 분류해 낼 때 뛰어난 효과를 나타냄

  • 학습 유형
    1. Voting: 하나의 데이터 셋에서 다양한 알고리즘의 분류기를 사용해 예측한 값을 결합하는 방식
      • 여러 개의 분류기가 투표를 통해 최종 예측 결과를 결정하는 방식 - 서로 다른 알고리즘을 가진 분류기의 결합
    2. Bagging: 한 가지의 알고리즘 분류기를 통해 다양한 데이터 셋 각각을 학습시켜 예측한 값을 결합
      • 여러 개의 분류기가 투표를 통해 최종 예측 결과를 결정하는 방식 - 각각의 분류기가 모두 같은 유형의 알고리즘 기반. 데이터 샘플링을 서로 다르게 하면서 보팅 수행.
        • ex) 랜덤 포레스트 알고리즘
      • 대부분 결정 트리 알고리즘을 기반으로 함
    3. Boosting: 여러 개의 분류기를 학습하면서 앞서 예측을 진행한 분류기가 예측에 틀린 데이터에 대해 가중치(weight)를 부여하여 다음 분류기의 학습을 진행하는 방식
      • XGBoost(eXtra Gradient Boost), LightGBM(Light Gradient Boost), 그래디언트 부스트
      • 대부분 결정 트리 알고리즘을 기반으로 함
    • Stacking: 미리 다른 알고리즘 분류기로로 학습한 예측 값을 다시 학습용 데이터로 만들어 다른 분류기에 재 학습시키는 방식
      • 배깅 및 부스팅과의 공통점 - 개별적인 여러 알고리즘을 서로 결합해 예측 결과 도출
      • 차이점 - 개별 알고리즘으로 예측한 데이터를 기반으로 다시 예측 수행

 

보팅 voting

  • 하드 보팅
    • 다수결 원칙과 비슷함
    • 예측한 결과값들 중 다수의 분류기가 결정한 예측값을 최종 보팅 결과값으로 선정하는 것
  • 소프트 보팅
    • 분류기들의 레이블 값 결정 확률을 모두 더하고 평균하여 확률이 가장 높은 레이블 값을 최종 보팅 결과값으로 선정
    • 예측 성능이 좋아 일반적으로 더 많이 사용됨

 

배깅 bagging - 랜덤 포레스트

: 같은 알고리즘으로 여러 개의 분류기를 만들어서 보팅으로 최종 결정하는 알고리즘

랜덤 포레스트는 데이터가 중첩된 개별 데이터 세트에 결정 트리 분류기를 각각 적용하는 것

  • 앙상블 알고리즘 중 비교적 빠른 수행 속도
  • 다양한 영역에서 높은 예측 성능
  • 기반 알고리즘은 결정 트리로, 쉽고 직관적인 장점
  • 부트스트래핑 bootstrapping
    • 개별 트리가 학습하는 데이터 세트는 전체 데이터에서 일부가 중첩되게 샘플링된 데이터 세트
    • 여러 개의 데이터 세트를 중첩되게 분리하는 것
  • 사이킷런은 RandomForestClassifier 클래스를 통해 랜덤 포레스트 기반의 분류를 지원함
  • 하이퍼 파라미터 및 튜닝
    • n_estimators: 랜덤 포레스트에서 결정 트리의 개수 지정. 디폴트 10개. 늘릴수록 학습 수행 시간이 오래 걸림.
    • max_features: 결정 트리에 사용된 max_features 파라미터와 같음. 단, ‘None’이 아닌 ‘auto’(=’sqrt’)와 같음
    • max_depth, min_samples_leaf: 결정 트리에서의 과적합을 개선하기 위해 사용되는 파라미터가 랜덤 포레스트에도 똑같이 적용될 수 O

 

부스팅 boosting - GBM(Gradient Boosting Machine)

: 여러 개의 약한 학습기를 순차적으로 학습—예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 가며 학습하는 방식인 부스팅.

  • 대표적인 부스팅의 구현으로 AdaBoost(Adaptive boosting)과 그래디언트 부스트
    • AdaBoost: 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 대표적인 알고리즘
      • 피처 데이터 세트에서 회차별로 잘못된 예측이 존재한다면 해당 오류 데이터에 가중치를 부여해 약한 학습기가 쉽게 분류할 수 있도록 함
    • GBM: 전반적으로 유사하나, 가중치 업데이트를 경사 하강법을 이용함.
      • 오류 값 = 실제 값 - 예측값
      • 경사 하강법(Gradient Descent): 오류식을 최소화하는 방향성을 가지고 반복적으로 가중치 값을 업데이트하는 것.
      • ⇒ 반복 수행을 통해 오류를 최소화할 수 있도록 가중치의 업데이트 값을 도출하는 기법
      • 분류와 회귀 모두 가능함
      • 사이킷런은 GradientBoostingClassifier 클래스 제공
    • 수행 시간이 오래 걸리고, 하이퍼 파라미터 튜닝 노력도 더 필요함
    • 수행 시간 문제가 가장 중요하게 극복해야 할 문제임
    • 하이퍼 파라미터 및 튜닝
      • loss: 경사 하강법에서 사용할 비용 함수를 지정. 기본값은 ‘deviance’
      • learning_rate: GBM이 학습을 진행할 때마다 적용하는 학습률. weak learner가 순차적으로 오류 값을 보정해 나가는 데 적용하는 계수. 기본값은 0.1이며 너무 작은 값을 적용하면 업데이트 되는 값이 작아져 최소 오류값을 찾아 예측 성능이 높아질 가능성이 높음.
      • n_estimators와 상호 보완적으로 조합해 사용함.
      • n_estimators: weak learner의 개수. 개수가 많을수록 예측 성능이 일정 수준까지는 좋아질 수 있음. 그러나 수행 시간이 오래 걸림. 기본값은 100.
      • subsample: weak learner가 학습에 사용하는 데이터의 샘플링 비율. 기본값은 1로, 전체 학습 데이터를 기반으로 학습한다는 의미.
      • max_features: 결정 트리에 사용된 max_features 파라미터와 같음. 단, ‘None’이 아닌 ‘auto’(=’sqrt’)와 같음
      • max_depth, min_samples_leaf: 결정 트리에서의 과적합을 개선하기 위해 사용되는 파라미터가 랜덤 포레스트에도 똑같이 적용될 수 O

 

XGBoost(eXtra Gradient Boost)

: 트리 기반의 앙상블 학습에서 가장 각광받고 있는 알고리즘 중 하나.

  • GBM의 단점인 느린 수행 시간 및 과적합 규제 부재 등의 문제를 해결
  • 병렬 CPU 환경에서 병렬 학습이 가능해 빠르게 학습을 완료 할 수 있음
  • 주요 장점
    • 뛰어난 예측 성능
    • GBM 대비 빠른 수행 시간
    • 과적합 규제
    • 나무 가지치기
    • 자체 내장된 교차 검증
    • 결손값 자체 처리
  • 핵심 라이브러리는 C/C++로 작성되어 있으나, 파이썬 패키지 ‘xgboost’도 제공

 

더보기

🗣 실질적으로 코드를 작성하고 프로그램을 실행해보는 과정은 이해가 어려워 깊이 공부하지는 못했어요 😔

 

출처: [파이썬 머신러닝 완벽 가이드]