뒤죽박죽 데이터분석 일기장
AI School 8기 14주차 본문
안녕하세요! 이번 포스트에서는 멋쟁이 사자 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을 방지합니다.
정리하자면, 훈련시키고 싶은 모델의 레이블 값이 편향되어 있으면 label smoothing을 통해서 over-fitting을 방지할 수 있습니다.
위 플롯을 보면 시각화된 레이블 값이 편향되어있다는 것을 알 수 있습니다. 따라서 이 경우에는 레이블값에 로그를 씌어져 정규분포 형태로 볼 수 있습니다.
위 서브플롯들을 살펴보면 로그값이 씌어진 레이블 값은 bell-shape의 분포를 가진 것을 확인할 수 있습니다. 하지만 예측된 값을 제출할 때는 다시 exponential function을 적용시켜줘야 합니다.
Gradient Boosting Machine
- 배깅 기법이 아닌 이전 모델을 반영하면서 순차적으로 모델을 발전시키는 부스팅 계열에 속하는 알고리즘이다.
- 랜덤포레스트와 다르게 무작위성이 없다.
- 데이터의 스케일에 구애받지 않는다.
- 고차원의 희소한 데이터에 잘 작동하지 않는다.
- 매개변수를 잘 조정해야 하고 훈련시간이 길다.
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 |