Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

뒤죽박죽 데이터분석 일기장

AI School 8기 14주차 본문

Likelion AI School 8기

AI School 8기 14주차

시우마이 2023. 3. 23. 16:36

안녕하세요! 이번 포스트에서는 멋쟁이 사자 AI School 8기 14주차에 배웠던 내용을 복습해  보려고합니다.

 

이번주에 배운 내용은 실습 파일 : 0603, 0701, 0702 (개인적으로 복습할 때 인지하려고 기재했습니다.) 


🧑‍💻 이번주에 배운 내용

  • Label Smoothing 
  • Gradient Boosting Machine
    • XGBoost
    • CatBoost
    • LightBGM

 

하나하나씩 천천히 정리해 보면서 복습해 보겠습니다. 🔥

 

Label Smoothing


Label smoothing은 출력 분포 정규화의 한 형태로, over confident output에 불이익을 주기 위해 학습 데이터의 실측값 라벨을 부드럽게 하여 neural network의 over-fitting을 방지합니다.

 

(a) 레이벨 스무딩 전 (b)레이블 스무딩 후

 

정리하자면, 훈련시키고 싶은 모델의 레이블 값이 편향되어 있으면 label smoothing을 통해서 over-fitting을 방지할 수 있습니다. 

 

 

count 컬럼을 레이블 값으로 갖는 데이터셋

위 플롯을 보면 시각화된 레이블 값이 편향되어있다는 것을 알 수 있습니다. 따라서 이 경우에는 레이블값에 로그를 씌어져 정규분포 형태로 볼 수 있습니다.

 

레이블 스무딩된 count_log1p

 

위 서브플롯들을 살펴보면 로그값이 씌어진 레이블 값은 bell-shape의 분포를 가진 것을 확인할 수 있습니다. 하지만 예측된 값을 제출할 때는 다시 exponential function을 적용시켜줘야 합니다. 

 

Gradient Boosting Machine


  • 배깅 기법이 아닌 이전 모델을 반영하면서 순차적으로 모델을 발전시키는 부스팅 계열에 속하는 알고리즘이다. 
  • 랜덤포레스트와 다르게 무작위성이 없다. 
  • 데이터의 스케일에 구애받지 않는다. 
  • 고차원의 희소한 데이터에 잘 작동하지 않는다. 
  • 매개변수를 잘 조정해야 하고 훈련시간이 길다. 

 

GradientBoostingRegressor의 파라미터

 

loss : 최적화 시킬 손실 함수 

learning_rate : 각 트리의 기여도를 제한하는 파라미터 

n_estimators : 부스팅 단계를 지정하는 파라미터입니다. 

 

이제 GradientBoostingMachine에 속한 알고리즘을 살펴보겠습니다! 

 

 

XGBoost


XGBoost는 다양한 프로그래핑 언어에서 제공하는 오픈소스 소프트웨어 라이브러리입니다. 따라서 이식성이 좋습니다. GBT에서 병렬 학습을 지원하여 학습 속도가 빨리진 모델입니다. 

 

장점 단점
- GBM 대비 빠른 수행시간(병렬처리) -XGBoost는 GBM에 비해 좋은 성능을 보여주고 비교적 빠르지만 학습시간이 느림 
- 과적합 규제(Regularization) 표준 GBM 경우 과적합 규제기능이 없으나, XGBoost는 자체에 과적합 규제 기능으로 강한 내구성을 지님 - Hyper Parameter 수가 많아 시간이 오래걸림
- 분류와 회귀 영역에서 뛰어난 예측 성능 발휘  - 모델이 overfitting 될 수 있음 
- Early Stopping(조기 종료) 기능이 있음  
- 다양한 파라미터가 있어 커스텀화 하기 좋음  

 

XGBoost 파라미터 정리

loss : {'squared_error', 'absolute_error', 'huber', 'quantile'}, default='squared_error'
최적화할 손실 함수. 'squared_error'는 회귀에 대한 제곱 오차를 나타냅니다. 'absolute_error'는 회귀의 절대 오차를 의미하며 강력한 손실 함수입니다. 'huber'는 이 둘의 조합입니다. 'quantile'은 사분위수 회귀를 허용합니다(알파를 사용하여 사분위수를 지정).

learning_rate: float, 기본값=0.1
학습률은 각 트리의 기여도를 학습률만큼 축소합니다. learning_rate와 n_estimators 사이에는 트레이드오프가 있습니다. 값은 [0.0, inf)] 범위여야 합니다.

n_estimators: int, 기본값=100
수행할 부스팅 단계의 수입니다. 그라디언트 부스팅은 과적합에 상당히 강하므로 일반적으로 숫자가 많을수록 성능이 향상됩니다. 값은 [1, inf)] 범위여야 합니다.

subsample: float, 기본값=1.0
개별 기본 학습자 맞춤에 사용할 샘플의 비율입니다. 1.0보다 작으면 확률론적 그라디언트 부스팅이 발생합니다. subsample은 매개변수 n_estimators와 상호 작용합니다. 하위 샘플을 1.0 미만으로 선택하면 분산이 감소하고 편향이 증가합니다. 값은 (0.0, 1.0] 범위에 있어야 합니다.

criterion: {'friedman_mse', 'squared_error'}, default='friedman_mse'
분할의 품질을 측정하는 함수입니다. 지원되는 기준은 프리드먼의 개선 점수에 따른 평균 제곱 오차의 경우 "friedman_mse", 평균 제곱 오차의 경우 "squared_error"입니다. 경우에 따라 더 나은 근사치를 제공할 수 있으므로 기본값인 "friedman_mse"가 일반적으로 가장 좋습니다.

 

CatBoost


CatBoost는 의사 결정 트리에서 그래디언트 부스팅을 위한 고성능 오픈 소스 라이브러리입니다. 

기존 알고리즘과 비교하여 순열 기반 대안을 사용하여 범주형 기능을 해결하려고 시도하는 그래디언트 부스팅을 제공합니다. 

 

장점 단점
- 과적합을 극복하기 위해 부스팅 정렬 - CatBoost는 희소 행렬을 지원하지 않습니다
- 범주형 기능에 대한 기본처리  - 데이터 세트에 수치형 타입이 많을 경우 상대적으로 많은 시간이 소요됩니다. 
- 더 빠른 실행을 위해 Oblivious Trees 또는 Symmetric Trees 사용  

 

공식 웹사이트에서 정의한 Catboost의 5가지 특징 

 

1. 파라미터 튜닝 없이 좋은 성능을 낼 수 있다

2. 범주형 피처를 지원한다

3. 빠르고 측정할 수 있는 GPU 버젼 

4. 정확도 증가

5. 빠른 예측 

 

요약하자면, 인코딩 없이 범주형 데이터를 손쉽게 모델에 넣을 수 있다는 것 같습니다. 

 

LightBGM


    • Light Gradient Boosting Machine의 약자인 LightGBM 은 원래 Microsoft에서 개발한 머신러닝을 위한 무료 오픈소스 분산 그래디언트 부스팅 프레임워크.
    • GOSS(Gradient based One Side Sampling)와 EFB(Exclusive Feature Bundling)를 적용한 LightGBM은 XGBoost와 비교해 정확도는 유지하며, 학습 시간을 상당히 단축시킨 모델

 

장점 단점
- 더 빠른 훈련 속도와 더 높은 호율성 - LightBGM은 overfitting(과적합)에 민감하고 작은 데이터에 대해서 과적합되기 쉬움 
- 적은 메모리 사용량  
- 더 나은 정확도  
- 병렬, 분산 및 GPU 학습 지원  
- 대규모 데이터를 처리   

 

특히, LightGBM에서는 GOSS와 EFB의 개념을 알아갖고 가야합니다! 그 이유는 성능을 높여주는 주요 원인이기 때문이죠. 

 

GOSS(Gradient-based One-side Sampling) : 기울기 기반 단측 샘플링 

- 데이터에서 큰 Gradient를 가진 모든 인스턴스를 사용해서 무작위로 Sampling을 수행함 

- 많이 틀린 데이터 위주로 샘플링 

- 결론적으로 행을 줄입니다. 

 

EFB(Exclusive Feature Bundling) : 배타적 특성 묶음 

- 대규모 Features 수를 다루기 위한것 

- 결론적으로 열을 줄입니다. 

 

LigthBGM의 주요 파라미터 

max_depth 나무의 깊이. 단일 결정나무에서는 충분히 데이터를 고려하기 위해 depth를 적당한 깊이로 만들지만, 보정되기 때문에 부스팅에서는 깊이 하나짜리도 만드는 등, 깊이가 짧은것이 크리티컬하지 않음

min_data_in_leaf 잎이 가질 수 있는 최소 레코드 수, 기본값은 20, 과적합을 다루기 위해 사용

feature_fraction : 
부스팅 대상 모델이 랜덤포레스트일때, 랜덤포레스트는 feature의 일부만을 선택하여 훈련하는데, 이를 통제하기 위한 파라미터
bagging_fraction : 
데이터의 일부만을 사용하는 bagging의 비율
early_stopping_round : 
더이상 validation데이터에서 정확도가 좋아지지 않으면 멈춰버림 훈련데이터는 거의 에러율이 0에 가깝게 좋아지기 마련인데, validation데이터는 훈련에 사용되지 않기때문에 일정이상 좋아지지 않기 때문
lambda : 
정규화에 사용되는 파라미터, 일반적인 값의 범위는 0 ~ 1
min_gain_to_split : 
분기가 되는 최소 정보이득, 트리에서 유용한 분할 수를 제어하는 데 사용
max_cat_group : 

범주형 변수가 많으면, 하나로 퉁쳐서 처리하게끔 만드는 최소단위

이보다 더 많은 변수가 있지만 추가적인 내용은 공식 문서에서 확인할 수 있습니다. 

https://lightgbm.readthedocs.io/en/latest/Parameters.html

 

지금까지 멋쟁이 사자 AI School 8기 14주차에 배운 내용을 엄청 간략하게 정리해 보았습니다. 

 

※ 해당 블로그 내용은 조은코딩의 박조은 강사님의 강의자료 PPT를 참고하여 만들었습니다. 

'Likelion AI School 8기' 카테고리의 다른 글

AI School 8기 13주차  (0) 2023.03.16
AI School 8기 12주차 WIL  (0) 2023.03.09
AI School 8기 11주차 WIL  (0) 2023.03.02