상세 컨텐츠

본문 제목

[TIL] 20221123

멋사 AISCOOL 7기 Python/TIL

by dundunee 2022. 11. 24. 00:06

본문

배깅 VS 부스팅

배깅 => 오버피팅 VS 부스팅 => 개별 트리의 성능이 중요할 때

 

GBM

  • 회귀 또는 분류 분석을 수행할 수 있는 예측모형
  • 예측모형의 앙상블 방법론 중 부스팅 계열에 속하는 알고리즘
  • 머신러닝 알고리즘 중에서도 가장 예측 성능이 높은 알고리즘
  • GBM구현한 패키지들이 다수
  • GBM은 계산량이 상당히 많이 필요한 알고리즘이기 때문에, 이를 하드웨어 효율적으로 구현하는 것이 필요

 

그래디언트 부스팅 트리 (Gradient Boosting Tree)

  • 랜덤 포레스트와 다르게 무작위성이 없다.
  • 매개변수를 잘 조정해야 하고 훈련 시간이 길다.
  • 데이터의 스케일에 구애받지 않는다.
  • 고차원의 희소한 데이터에 잘 작동하지 않는다. -> PCA로 차원축소!

 

MAE VS MSE

기울기가 0인 지점을 찾을 수 있으나 기울기의 방향만 다를 뿐 수치가 같아서

정확한 기울기 변화를 측정하기 어렵기 때문에 MSE를 더 많이 사용한다.

 

부스팅모델에서 learning rate과 n_estimator의 관계는 trade-off관계이다.

learning_rate를 줄인다면 가중치 갱신의 변동폭이 감소해서, 여러 학습기들의 결정 경계(decision boundary) 차이가 줄어들게 됩니다. n_estimators 를 늘린다면 생성하는 약한 모델(weak learner)가 늘어나게 되고, 약한 모델이 많아진만큼 결정 경계(decision boundary)가 많아지면서 모델이 복잡해지게 됩니다. 즉, 부스팅알고리즘에서 n_estimators(또는 learning_rate)를 늘리고, learning_rate(또는 n_estimators)을 줄인다면 서로 효과가 상쇄됩니다. 여기서 n_estimator는 학습 횟수를 의미한다.

 

? 부스팅모델은 왜 overgitting에 민감할까

  • 오답노트 방식인데 한번 잘못되면 빠져나오기 쉽지 않을 수 있다.
  • 즉 이전 트리(이전학습)이 다음 트리(다음학습)에 영향을 주기 때문에

? 배깅 모델은 시각화가 어려워 3rd party 도구를 따로 설치해야 시각화 가능합니다. 그것도 개별 트리를 시각화 하는 것은 어렵습니다. 그런데 부스팅 모델은 왜 시각화가 가능할까요?

  • 배깅은 모델은 병렬적으로 트리를 여러개 생성한다.
  • 그런데 부스팅은 순차적으로 생성하기 때문입니다.
  • 즉 배깅은 여러개의 트리를 만들고, 부스팅은 하나의 트리를 만들기 때문이다.

 

XGBoost

  • 병렬학습을 지원하여 학습속도가 빨라짐
  • 랜포와 달리 부스팅 모델은 시각화를 지원함
  • 모든 가능한 트리를 나열하여 최적 트리를 찾는 것은 거의 불가능하기 때문에, 2차 근사식을 바탕으로 한 손실함수를 토대로 매 iteration마다 하나의 leaf로부터 가지를 늘려나가는 것이 효율적
  • 손실 함수가 최대한 감소하도록 하는 split point(분할점)를 찾는 것이 XGBoost의 목표
  • Regularization: 과적합 규제 기능을 지원함
  • 하이퍼파라미터의 종류가 다양함
  • 기존 트리모델에 없었던 파라미터 중에 중요한 역할을 하는 파라미터는 learning rate이다, learning rate은 손실함수의 최소점을 찾는데 중요한 역할을 하나 높으면 과적합 되기 쉽다
  • n_estimators값이 높다면 과적합이 될 수있다.
  • learning rate이 낮을 때는 n_estimators을 높여야 과적합을 방지할 수 있다.
  • 민감하게 조정해야 할 파라미터는 booster, eval_metric, objective L1, L2
  • Early Stopping(조기종료)기능을 이원함
  • 학습시간이 느림, overfitting의 위험

@과적합=과대적합=overfitting: 학습을 많이하여 일반화의 오류가 발생할 수 있다.

 

lightGBM

  • 결정 트리 알고리즘을 기반으로 하며 순위 지정 , 분류 및 기타 기계 학습 작업에 사용됩니다.
  • 개발 초점은 성능과 확장성에 있습니다.
  • xgboost에 비해 속도가 빠르다. 더 나은 정확도, 적은 메모리를 사용한다.
  • GOSS 기울기 기반 단축 샘플링,
  • EFB 배타적 특성 묶음

 

CatBoost

  • 기존 알고리즘과 비교하여 순열 기반 대안을 사용하여 범주형 기능을 해결하려고 시도 하는 그래디언트 부스팅 프레임워크를 제공합니다 .
  • 범주형 기능에 대한 기본 처리(범주형데이터를 처리하고 넣으면 더 성능이 좋다!)
  • 빠른 GPU 훈련
  • 모델 및 기능 분석을 위한 시각화 및 도구
  • 더 빠른 실행을 위해 무시 트리 또는 대칭 트리 사용
  • 과적합을 극복하기 위해 순서가 있는 부스팅을 사용
  • 자체적으로 하이퍼파라미터튜닝 기능을 제공함
  • 희소행렬을 지원하지 않는다
  • 데이터세트에 수치형타입이 많을 때 LIGHTGBM보다 훈련하는데 상대적으로 많은 시간이 소요죔
  • 중복되는 피처도 묶어서 처리 -> EFB 배타적 특성 묶음과 유사
  • model을 생성할 때 cat_features를 지정해서 실습하면 전처리 혹은 인코딩 없이 쉽게 해보려고

 

설치이슈 문제

  • 버전 호환성 문제, 접착제 언어이기 때문에 다른 언어에 대한 의존성 문제가 있다.
  • 다른 언어를 실행할 수 있는 환경이 구성되어 있지 않다면 설치해도 불러오지 못하거나 오류가 발생한다.
  • 아나콘다로 설치했다면 conda 로 설치하는 것이 가장 깔끔하며, pip로 설치하면 설치 이슈가 발생할 수 있다.
  • PyCaret의 경우 코랩에서 사용하는걸 추천! 기존 잘 사용하던 가상환경이 망가질 수 있다.

 

cross validation-kfold지정

  • 셔플 기능 사용여부를 결정할 수 있고, 랜덤여부를 결정할 수 있다.

 

n_jobs

  • 가끔 성능이 낮은 장비에서 큰 데이터로 작업할 때 n_jobs 를 -1 로 사용하면 노트북이 dead kernel 이 되는 현상이 있다
  • 성능이 낮은 장비이거나 다른 작업이 많이 진행되고 있다면 n_jobs 를 1로 설정하면 좀 나아진다.

 

lightGBM, CatBoost는 category 데이터에 대한 전처리가 필요없다.

  • 즉 원핫인코딩이 필요없다!

 

이진분류의 평가

? 현실세계의 불균형한 데이터

  • 코로나 검사결과, 암환자 여부, 생산과정 양불(양품, 불량품 )여부,사기 탐지,은행대출여부 판단 신용카드 사기,교통사고, 화재 발생,게임, 광고 어뷰징, 재난예측

? confusion matrix가 다 다른데 어떻게 봐야할까

  • 사이킷런 기준으로 보는게 그나마 덜 혼란스럽다

cofusion matrix

  • TP, TN, FP, FN
  • 제1종오류(알파, FP): F인데 T로 예측되는 것 -> precision
  • 제2종오류(베타, TN): T인데 F로 예측하는 것 -> recall
  • 정확도(ACCARACY): 맞춘비율
  • 정밀도(PRECISION): TP / (TP + FP)-> T로 예측한 것 중 실제가 T인 비율->예측값중심(스팸매일여부, 무고한피고인에게유죄선고)
  • 재현율(RECALL): TP / (TP + FN) -> 실제로 T인것 중 T로 예측된 비율->실제값중심(암진단, 재난예측)

관련글 더보기