여러 개의 분류기(Classifier)를 생성하고
그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법
여러 개의 개별 모델을 결합하여 더 강력한
예측 모델을 구착하는 방법
앙상블은 개별 모델의 약점을 보안하고
모델의 성능을 향상시키는 데 사용
앙상블 기법을 사용하면 개별 모델의 한계를 극복하고 예측 성능을 향상시킬 수 있다
모델의 안정성을 높이고, 과적합을 줄이며,
다양한 데이터 분포나 패턴을
잘 다룰수 있게 해준다
복원 추출을 통해 랜덤 추출한 데이터를 생성하고(Bootstrap),
각 데이터를 모델 학습하여 결합한 후
(Aggregating),
학습된 모델의 예측 변수를 활용하여
최종 모델을 생성하는 방법
배깅은 "Bootstrap Aggregating"의 줄인말
Bootstrap
원본 데이터 집단으로부터
원본과 유사한 새로운 데이터 집단을 추출 하는것
Aggregate
'모으다, 합치다'라는 의미
배깅이란 여러개의 원본과 유사한 새로운 데이터 집단을 학습시켜 합치는 것
같은 알고리즘을 사용하여 다양한 훈련 데이터
샘플을 생성하고 이를 기반으로 여러 모델을 학습
부스팅은 약한 학습기(Weak Learner)를
여러 번 결합하여 강한 학습기(Strong Learner)를
생성하는 기법
부스팅은 이전 모델이 실패한 샘플에 기중치를
높게 주어 다음 모델이 더 잘 수행하도록
하는 방식으로 동작
대표적인 부스팅 알고리즘으로
AdaBoost, Gradient Boosting, XGBoost,
LightGBM 등이 있다
스태킹은 여러 다른 모델을 훈련하고,
그 모델들의 예측 결과를 입력으로 받아
최종 예측을 수행하는 메타 모델을
학습하는 기법이다
스태킹은 다양한 모델의 다양한 예측력을
결합하여 더 강력한 모델을 만든다
여러 모델의 예측 결과값을 활용하여 투표를 통해 최종 예측값 결정
결과가 직관적이며 해석이 쉽고, 평균, 다수결 채택 등의 간단한 연산을 사용함
여러 개의 분류기의 투표로 결정하는 것
보팅은 다른 모델들의 예측 결과를 결합하여
최종 예측을 수행하는 기법이다.
다수결 투표, 가중 평균, 소프트 보팅,
하드 보팅 등 다양한 방식의 보팅이 있으며,
주로 분류 문제에서 사용된다
Hard Voting
다수의 분류기간 다수결로 최종 클래스를
결정하는 것
Soft Voting
다수의 분류기들의 Class 확률의
평균으로 결정하는 것
배깅의 대표 모델
부트스트랩으로 만들어진 여러 샘플 데이터를 가지고, 여러번의 Decision Tree를 수행한다음 이를 Aggregation하는 것이 Random Forest이다.
Bootstrap을 활용한 랜덤 샘플링으로
과적합(Overfitting) 방지
복원 과정이 있어 불균형하거나 충분하지
않은 데이터에 적용 가능
병렬처리 가능
n_estimators
: 트리의 수를 설정한다.max_features
: 각 노드에서 선택하는 특성의 수 (무작위 선택), max_features의 값이 커지면Boosting 대표 모델
Decision Tree의 Boosting 모델 중
가장 표준이 되는 모델
AdaBoost는 지수 손실로 계산
학습 데이터 N개로부터 중복을 허용하여
무작위로 샘플 데이터 N개를 추출 한다
샘플 데이터에서 중복을 허용하지 않고,
무작위로 X 값(input feature) d개를 선택한다
d개의 feature에 대해 Decision Tree를 수행한다
오차가 발생한 데이터가 샘플링할 때 더욱 잘 추출되도록 가중치를 부여한다.
<- 배깅 모델과의 차이점
위의 1~3과정을 K번 수행한다
K개의 약한 학습기 각각에 가중치를
부여해 결합한다.
base_estimator
: 모델을 정해주는 파라미터, (기본 값= DecisionTreeClassifier(max_depth=1))
n_estimators
: 앙상블의 약한 학습기 개수, (기본 값=50)
learning_rate
: 이전 트리의 오차를 얼마나 강하게 보정할 것인지를 설정, learning rate가 클수록 보정을 강하게 한다. (기본값=1.0)
Decision Tree 의 대표적인 Boosting
모델 중 하나이다.
CART 기반의 알고리즘으로 분류와 회귀가 모두 가능하며, 회귀 분석에 강점을 보인다.
잔차를 새로운 학습기에 학습시켜 잔차를 줄여나가는 방식으로 학습을 하기 때문에 과적합이 잘 일어나는 단점이 있다.
Ada Boost와 유사하지만,
가중치 업데이트를 경사하강법을
이용하는 것이 큰 차이
즉, 뛰어난 예측 성능과 동시에 보다 빠른
수행시간으로 학습을 진행한다
회귀분석일 경우의 loss function:
분류일 경우의 loss function:
기존 예측 값에 잔차 learing rage를 더하여
새로운 예측 값으로 업데이트 한다
2~4 과정을 K번 반복한다
K개의 학습기를 결합하여 예측을 수행한다
loss
: 'deviance'와 'exponential' 중에서 선택 가능, 'deviance'은 로지스틱 손실 함수이고 'exponential'는 에이다부스트에서 사용하는 손실 함수로 지수 손실 함수임, (기본 값='deviance)
learning_rate
: 에이다 부스트의 파라미터와 비슷하게 이전 트리의 오차를 얼마나 강하게 보정할 것인지를 정해주는 파라미터. 0~1 사이의 값을 가지며, 너무 작은 값을 설정하면 업데이트 되는 값이 작아져 수행시간이 오래 걸릴 수 있음, (기본 값=0.1)
n_estimators
: 약한 학습기의 개수 (기본 값=100)
subsample
: 각 트리가 훈련할 때 사용할 데이터의 비율을 지정. 'subsample = 0.3'이면 각 트리는 무작위로 선택된 30%의 훈련 데이터로 학습함. (기본 값=1.0)
결정 트리를 제어하는 파라미터인 max_depth
(기본 값=3), min_samples_leaf
(기본 값=1) 등을 가지고 있음.
tree based 모델은 근본적으로 과적합의 위험이 큼
거기에 오차를 계속해서 줄여가는 앙상블 모델은 더 심한 과적합을 발생시킬 수 있다
Subsampling
데이터 셋의 일부만을 추출하는 방법
Shrinkage(Sklearn의 learning_rate)
뒤 쪽에 생성되는 모델의 영향력을 줄여주는 방법
Early Stopping
학습 오차와 검증오차를 비교하다가,
검증오차가 더이상 줄어들지 않고 오히려
커지면 학습을 종료하여 학습데이터에
과적합 되는 현상을 막는 것
Gradient Boost Machine(GBM) 기반 알고리즘이다.
GBM의 단점인 긴 수행 시간, 과적합 규제의 부재 등의 한계를 극복한 것으로 평가 받고 있다.
XGboost의 경우에는 파라미터를 3개의
범주로 나눈다.
일반적인 파라미터(General parameters),
부스터 파라미터(Booster parameters),
학습 과정 파라미터(Learning Task parameters)
로 구성 되어있다.
booster
: 어떤 부스터 구조를 쓸 것인지 정하는 파라미터임, gbtree(결정트리), gblinear(선형모델), dart(Drop out Regression Trees) 중 선택이 가능, gbtree의 성능이 제일 나음, (기본 값=gbtree)
n_jobs
: xgboost를 실행시 병렬처리에 사용되는 코어 수, 따로 값을 주지 않으면 자동적으로 코어를 탐지하여 사용
num_feature
: 특성의 수를 정해줘야 하는 경우에 사용
learning_rate
: 가중치를 정해주는 파라미터
gamma
: 트리가 분할을 할 때 필요한 최소 손실 감소(Minimum Loss reduction)를 지정해주는 파라미터, 값이 커지면 트리의 깊이가 줄어들어 보수적인 모델이 됨 (기본 값=0)
max_depth
: 트리의 깊이를 정해주는 파라미터, (기본 값=6)
reg_lambda
: L2 norm, 값이 커질수록 모델이 보수적으로 변함
reg_alpha
: L1 norm. 값이 커질수록 모델이 보수적으로 변함
objective
: 목적함수(손실함수)를 정해주는 파라미터
binary:logistic
는 이진분류, multi:softmax
는 softmax는 다중 클래스 분류, 이 외에도 multi:softprob
, rank:map
등 다양한 값들이 존재 eval_metric
: 모델의 평가 함수를 설정하는 파라미터로 회귀분석이면 rmse
, 분류 문제에는 error
를 기본값으로 사용, objective에 따라 기본값이 설정되어 있음
- rmse
(root mean square error), mae
(mean absolute error), error
(Binary classification error rate) 등 여러 값들이 존재한다.
XGBoost와 함께 Gradient Boost Machine(GBM) 기반 대표 알고리즘이다.
'light'라는 이름처럼 LightGBM은 XGBoost보다 더 빠른 연산이 가능하고 메모리도 적게 사용한다.
그러한 측면에서 대용량 데이터 셋
사용시 효율적이다.
GBM계열 대부분이 균형 트리 분할 방식을 사용하는 것과 달리, LightGBM은 리프 중심 트리 분할을 사용한다. 이를 통해
실행 시간을 단축시킬 수 있다.
그러나 너무 작은 데이터 셋에서는
과적합 가능성이 높다.
xgboost의 파라미터와 거의 동일
max_depth
: 트리의 깊이를 조정하는 파라미터, XGBoost와 다르게 리프 노드가 계속 분할되기 때문에 max_depth를 크게 설정하여야 함,
(기본 값=-1)
n_estimators
: 반복할 결정 트리의 개수,
(기본 값=9)
learning_rate
: 학습기 마다 가중치를 얼마나 줄 것인지를 설정하는 파라미터, (기본 값=0.1)
boosting_type
: xgboost의 booster파라미터와 같은 역할을 하지만 지원하는 모델이 다르다,
gbdt(Gradient Boosted Decision Trees)
, rf(Random Forest)
, dart
, goss(Gradient-based One-Sied Sampling)
가 있다.
reg_alpha
: L1 규제
reg_lambda
: L2 규제