머신러닝(앙상블)
앙상블 개요
앙상블 방법
- 앙상블은 서로 다른/또는 같은 알고리즘을 결합하지만 대부분 동일한 알고리즘을 결합한다.
- 앙상블 학습의 유형 : 보팅, 배깅, 부스팅, 스태킹 등
앙상블의 종류
-
보팅 : 여러 개의 분류기가 투표를 통해 최종 예측 결과를 결정하는 방식
- 배깅(Bagging) : 각각의 분류기가 모두 같은 유형의 알고리즘 기반이지만, 데이터 샘플링을 서로 다르게 가져가면서 학습을 수행해 보팅을 수행
- 랜덤 포레스트(Random Forest) : 뛰어난 예측 성능, 상대적으로 빠른 수행시간, 유연성
- 부스팅(Boosting) : 여러 개의 분류기가 순차적으로 학습하되, 앞에서 학습한 분류기가 예측이 틀린 데이터에 대해서는 올바르게 예측할 수 있도록 다음 분류기에 가중치를 부여한다.
쉽게말하면 배깅같은 경우는 단일 모델을 만들고 bootstrap과정으로 데이터를 랜덤으로 추출한 뒤 모델을 훈련시켰다면 부스팅은 앞에서 예측한 분류기가 틀린부분에 있어 가중치를 부여한다. 이로써 가중치를 부여해서 틀린 부분을 더 잘 맞출 수 있도록 하는 것이다.
- 그래디언트 부스팅(Gradient Boosting) : 뛰어난 예측 성능을 가지고 있지만, 수행 시간이 너무 오래 걸림
- XgBoost(eXtra Gradient Boost)와 LightGBM : 기존 그래디언트 부스팅의 예측 성능을 한 단계 발전시키면서도 수행 시간을 단축시킨 알고리즘이다. 정형 데이터의 분류 영역에서 가장 활용도가 높은 알고리즘이다.
- 스태킹(앙상블의 앙상블) : 여러 가지 다른 모델의 예측 결괏값을 다시 학습 데이터로 만들어서 다른 모델로 재 학습시켜 결과를 예측
보팅
from sklearn.neural_network import MLPClassifier
clfs = [('LR', LogisticRegression()), ('RF', RandomForestClassifier(max_depth=5)), ('MLP', MLPClassifier()) ]
vote_clf = VotingClassifier(clfs)
배깅
각각의 Decision Tree 들의 평균 결과를 얻어서 보팅을 하는 방식이다.
clf = RandomForestClassifier(n_estimators=50, max_depth=5, random_state=2019)
clf.fit(x_train, y_train)
print('Single Random Forest Acc : {:.2f}%'.format(clf.score(x_test, y_test)*100))
XGBoost(eXtra Gradient Boost)
XGBoost of 하이퍼 파라미터 여기 링크에 XGBoost에서 사용하는 하이퍼 파라미터와 코드가 나와있다.
- Overfitting 방지 노하우
- eta 값을 낮춘다 -> eta 값을 낮추면 반대로 num_boost_round(n_estimator)를 높여준다.
- max_depth 값을 낮춘다.
- min_child_weight 값을 높인다.
- gamma 값을 높인다.
- subsample과 colsample_bytree를 낮춘다.
Leave a comment