개발공부/SK Networks Family AI bootcamp 강의노트

19일차 [ 다중분류 / 앙상블 / HPO ]

HyunJung_Jo 2025. 2. 11. 17:13

최대 가능도 추정량

정규분포 형태로 데이터를 바꿔줘야 학습이 잘 된다.

  • sigmoid, 이진분류
  • softmax, 다중분류

 

이진분류/다중분류

  • confusion_matrix:무조건 히트맵 그려봐야 어느 데이터를 잘 맞추는 지 볼 수 있다.
  • 평가: f1-score

앙상블

https://colab.research.google.com/drive/14Hsv3uMtIdonLMIB9nUytOPzrzb4Cci0#scrollTo=QtI46tTOsrMn

 

Google Colab Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

  • 모델 연결 (bagging, boosting,voting, stacking)
  • 앙상블 나온 이후로 모든 경진대회에서 1등 먹었다.

Bagging

  • bagging(데이터 복원 추출해서 여러번 학습)+random forest ( 성능 좋으나 overfitting문제) => 성능 향상

Boosting 

  • random forest 기반
  • boosting: 전체 데이터를 학습하여 학습양이 bagging보다 많아서 압도적으로 성능이 좋다. 또한 bagging은 데이터 불균형시 한쪽에서만 복원추출할 수 있어서 불리하다.
  • Boosting은 약한 모델이 잘못 분류한 데이터에 더  많은 가중치 부여, 훈련하고, 여러개 약한 학습기가 순차적 결합하여 강한 학습기를 만든다.
  • Gradient Boost : 순차적으로 학습, 오래 걸린다.
  • XGBoost : eXtreme Gradient Bossting, 병렬학습이라 빠르다. GPU도 지원함. 모든 경우의 수를 연산. 메모리 많이 잡아 먹음.
  • feature importance, heatmap(confusion table)을 꼭 찍어보고 새로운 feature을 뽑는 가설을 세워야 한다.
  • Light GBM: Light Gradient Machine, XGBoost의 단점 개선. 불균형 트리. 최대 손실 값을 갖는 리프 기준 분할하여 깊고 비대칭적 트리 생성. 빠르고 가볍다. 내부적으로 알아서 문자열 인코딩 해준다. 원핫인코딩은 안해줌.
  • 공홈 보면서 하이퍼파라미터 숙지하고 튜닝해보기!
  • random_state:42로 고정해서 오버피팅할 때까지 전처리하고, 그 이후 튜닝하자.
import os
import numpy as np
import random
import torch

def reset_seeds(seed=42):
  random.seed(seed)
  os.environ['PYTHONHASHSEED'] = str(seed)    # 파이썬 환경변수 시드 고정
  np.random.seed(seed)
  torch.manual_seed(seed) # cpu 연산 무작위 고정
  torch.cuda.manual_seed(seed) # gpu 연산 무작위 고정
  torch.backends.cudnn.deterministic = True  
  # cuda 라이브러리에서 Deterministic(결정론적)으로 예측하기 (예측에 대한 불확실성 제거 )
  
# 매 셀마다 실행해야 한다.
  • Catboost Categorical Boosting, 범주형 변수 많을 때 쓰기
프로젝트에 적용하는 기술을 업데이트하기 위해서는, 프로젝트 마무리한 후에 다시 업그레이드하는 것을 추천한다.
깊이를 더해가자.
competition 시 주의점.
random_state 고정하기, 테스트셋을 학습시 사용하지 말기, 사용한 주피터 노트북이 그대로 실행 안되면 탈락.
테스트셋은 전처리만 가능.
  • voting 기법: hard voting: 예측값 다수결 결정, soft voting: 예측 결과값 확률 평균하여 최종 클래스 결정
  • stacking 기법: 좋지만 hyperparameter가 많아서 빡세고 오래 걸린다. n_jobs= -1(가용 cpu 전부 다 쓴다)
  • train_test_split, stratify, 분류모델일 때 타겟을 기준으로 비율을 유지해달라.

HPO (HyperParameter Optimization)

https://colab.research.google.com/drive/13vrFjnnE2i-mjN8BpIo_ikrKN-J4lCfP#scrollTo=HH03jbDocqJt

 

Google Colab Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

  • Grid Search : 일일이 하이퍼파라미터 찾지 않고 자동화
  • Random Search: 그리드 서치 보다 더 빠르고 좋다.
  • Bayesian Search 더 낫다. 최적의 파라미터를 찾아줌!