보팅 (Voting)
배깅 (Bagging)
부스팅 (Boosting)
스태킹
일반적으로 서로 다른 알고리즘을 가진 분류기의 결합을 통해 최종 예측 결과를 결정함
보팅 유형
- 하드 보팅 : 예측한 결과값 중 다수의 분류기가 결정한 예측값을 최종 보팅 결과값으로 선정.
- 소프트부팅 : 분류기의 각 레이블 값 결정 확률을 모두 더하고 이를 평균낸 후에 확률이 가장 높은 레이블 값을 최종 보팅 결과값으로 선정.
대부분 결정 트리 알고리즘을 기반으로 함
같은 유형의 알고리즘을 기반으로 하는 분류기를 사용하며, 샘플링 데이터셋을 다르게 학습을 시켜 보팅을 수행함
부트스트랩 (Bootstrap) 이란?
- 원래의 데이터 셋으로부터 관측치를 반복적으로 추출(복원 반복 추출)하여 데이터 셋을 얻는 방법
- 데이터 양을 임의적으로 늘리고, 데이터 셋의 분포가 고르지 않을 때 고르게 만듦.
랜덤포레스트는 배깅의 대표적인 알고리즘
기반 알고리즘 : 결정 트리 알고리즘
📍 부스팅 기반의 다양한 앙상블 알고리즘은 대부분 결정 트리 알고리즘을 기반 알고리즘으로 채택
예측 결정 방식 : 여러 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 결정.
개별 트리가 학습하는 데이터는 일부가 중첩되게 샘플링 된 데이터셋임
부트스트래핑 : 여러개의 데이터셋을 중첩되게 분리하는 방식
➕ 배깅(Bagging) = BootStrap Aggrigating의 줄임말
부스팅 알고리즘 : 여러 개의 약한 학습기를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식
부스팅의 대표 모델
→ 과정 : 여러 번의 약한 학습기로 분류하고, 각각의 오류 데이터에 대해서 가중치를 부여. 이러한 지표들을 모두 결합하여 미지의 데이터에 대해 예측 수행 → 개별 약간 학습기보다 결과가 훨씬 좋음
너무 작은 값 : 업데이트 되는 값이 작아져서 예측 성능이 높아지지만 수행 시간이 오래 걸리게 됨
너무 큰 값 : 최소 오류 값을 찾지 못하고 지나쳐 버려 예측 성능이 떨어질 가능성이 높지만 빠른 수행이 가능하게 됨
=> learning_rate는 n_estimators와 상호 보완적으로 조합해 사용해야함
항목 | 설명 |
---|---|
뛰어난 예측 성능 | 일반적으로 분류와 회귀 영역에서 뛰어난 예측 성능 보임 |
GBM 대비 빠른 수행시간 | 일반적인 GBM은 순차적으로 Weak learner가 가중치를 증감하는 방법으로 학습하기 때문에 전반적으로 속도가 느림. 하지만 XGBoost는 병렬 수행 및 다양한 기능으로 보다 빠른 수행성능을 보장함. (단, GBM에 비해 빠르지만, 다른 ML 패키지보다 빠르다는 것은 아님) |
과적합 규제 | 표준 GBM의 경우 과적합 규제 기능이 없지만 XGBoost는 자체에 과적합 규제 기능으로 과적합에 좀 더 강한 내구성 가짐. |
Tree pruning(나무 가지치기) | 더 이상 긍정 이득이 없는 분할을 가지치기 해서 분할 수를 더 줄이는 추가적인 장점을 가짐. |
자체 내장된 교차 검증 | 반복 수행시마다 내부적으로 학습 데이터 세트와 평가 데이터 세트에 대한 교차 검증을 수행 + 최적화시 중간에 멈출 수 있는 조기 중단 기능 존재 |
결손값 자체 처리 | XGBoost는 결손값을 자체적으로 처리할 수 있음 |
- eta: GBM의 학습률과 같은 파라미터
0과 1사이의 값을 지정하며 부스팅 스텝을 반복적으로 수행할 때 업데이트 되는 학습률 값, 디폴트 = 0.3- min_child_weight: 트리의 리프 노드를 추가적으로 나눌지를 결정할 최소 손실 감소 값. 해당 값보다
큰 손실이 감소되면 리프노드 분리- sub_sample: 트리가 과적합 되는 것을 막기 위해 데이터를 샘플링하는 비율 지정한다.
- colsample_bytree: 트리 생성에 필요한 피처를 임의로 샘플링 하는데 사용된다. 많은 피처가 있을 경우 과적합 조정에 적용
항목 | 설명 | |
---|---|---|
num_iterations | [default=100] | 반복 수행하려는 트리의 개수를 지정. 크게 지정할수록 예측 성능이 높아질 수 있으나, 너무 크게 지정하면 오히려 과적합으로 성능이 저하될 수 있음. |
learning_rate | [default=0.1] | 0에서 1사이의 값을 지정, 부스팅 스텝을 반복적으로 수행할 때 업데이트되는 학습률 값임. 일반적으로 n_estimators를 크게 하고 learning_rate를 작게 해서 예측 성능을 향상시킬 수 있으나, 마찬가지로 과적합 이슈와 학습 시간이 길어지는 부정적인 영향도 고려해야 함. GBM, XGBoost의 learning_rate와 같은 파라미터임. |
max_depth | [default=-1] | 트리 기반 알고리즘의 max_depth와 같다. 0보다 작은 값을 지정하면 깊이에 제한이 없다. 지금까지 소개한 Depth wise 방식의 트리와 다르게 LightGBM은 Leaf wise 기반이므로 깊이가 상대적으로 더 깊음. |
min_data_in_leaf | [default=20] | 결정 트리의 min_samples_leaf와 같은 파라미터이다. 하지만 사이킷런 래퍼 LightGBM 클래스인 LightGBMClassifier에서는 min_child_samples 파라미터로 이름이 변경된다. 최종 결정 클래스인 리프 노드가 되기 위해서 최소한으로 필요한 레코드 수이며, 과적합을 제어하기 위한 파라미터임. |
num_leaves | [default=31] | 하나의 트리가 가질 수 있는 최대 리프 개수임. |
boosting | [default=gbdt] | 부스팅의 트리를 생성하는 알고리즘을 기술함. |
gbdt | 일반적인 그래디언트 부스팅 결정 트리 | |
rf | 랜덤 포레스트 | |
bagging_fraction | [default=1.0] | 트리가 커져서 과적합되는 것을 제어하기 위해서 데이터를 샘플링하는 비율을 지정한다. 사이킷런의 GBM과 XGBClassifier의 subsample 파라미터와 동일하기에 사이킷런 래퍼 LightGBM인 LightGBMClassifier에서는 subsample로 동일하게 파라미터 이름이 변경됨. |
feature_fraction | [default=1.0] | 개별 트리를 학습할 때마다 무작위로 선택하는 feature의 비율이다. 과적합을 막기 위해 사용된다. GBM의 max_features와 유사하며, XGBClassifier의 colsample_bytree와 똑같으므로 LightGBM Classifier에서는 동일하게 colsample_bytree로 변경됨. |
lambda_l2 | [default=0.0] | L2 regulation 제어를 위한 값이다. feature 개수가 많을 경우 적용을 검토하며 값이 클수록 과적합 감소 효과가 있다. XGBClassifier의 reg_lambda와 동일하므로 LightGBMClassifier에서는 reg_lambda로 변경됨 |
lambda l1 | [default=0.0] | L1 regulation 제어를 위한 값이다. L2와 마찬가지로 과적합 제어를 위한 것이며, XGBClassifier의 reg_alpha와 동일하므로 LightGBMClassifier에서는 reg_alpha로 변경됨. |