여러가지 ensemble learning 방법들
1. background
ensemble이란 단일 알고리즘보다 적당히 여러개 알고리즘을 조합해서 성능이 향상되길 기대하는 것
모든 데이터셋에 대한 우수한 알고리즘이 존재하는가?
위 그림에서 x축은 데이터셋이고 y축은 알고리즘의 상대적인 에러이고 각 line은 알고리즘에 따른 그래프
그림을 보면 모든 알고리즘 각각이 모든 데이터셋에 우수하진 않다
neural network도 Diabetes라는 데이터에는 에러율이 높다
특정 알고리즘이 모든 데이터셋에 대해 항상 열등한가? 우월한가? 그것은 아니다
따라서 하나의 알고리즘을 쓰는 것보다 여러 알고리즘을 모두 쓰는 것이 좋은 인사이트를 얻을 수 있다
2. ensemble learning
여러 개의 분류기를 생성하고 그 예측을 결합함으로써 보다 정확한 예측을 도출하고자 하는 기법
강력한 하나의 모델을 쓰는 것 대신 보다 약한 여러개의 모델을 조합해서 정확한 예측에 도움을 주는 기법
현실에 비유하면 한명의 전문가보다 여러명의 집단 지성으로 문제를 해결하고자 하는 방식이다
약한 여러개의 분류기 N개를 각각 가중치를 주어 강력한 분류기를 만드는 방식
성능을 분산시켜 overfitting을 어느정도 해소함
개별 모델의 성능이 잘 안나오면 앙상블로 성능이 향상될 수 있음
3. bagging
bootstrap aggregating의 약자로 bootstrap sampling을 통해 각각의 sample에 모델을 학습시키고 결과를 집계하여 aggregating을 한다
각각의 sample에 모두 같은 유형의 알고리즘을 사용함
데이터 sampling 시 중복을 허용함
overfitting의 방지에 효과적임
random forest가 대표적인 bagging알고리즘
만약 bootstrap sampling과정에서 중복을 허용하지 않고 sampling을 하면 pasting이라고 부름
decision tree를 적합시키면 random forest알고리즘
4. voting
bagging과 비슷하게 전개는 되는데 앞의 bagging은 여러개의 데이터 샘플을 만들어 각각 동일한 알고리즘을 적용하여 최종 집계를 한다면
voting은 데이터 샘플에 대해 여러 알고리즘을 적용하여 최종 집계하는 방식
bagging은 데이터셋에서 bootstrap sample을 하여 각각에 동일한 알고리즘을 적용한 뒤 voting을 하여 최종 결정
일반적인 voting은 동일한 데이터셋에 여러 알고리즘을 적용한 뒤 전부 voting하여 최종 결정
hard voting은 다수 분류기가 예측한 label중 가장 많이 예측한 다수결 원칙을 따라 최종 결정함
소수의 결정은 신경 쓰지 않는다는 점이 하나의 단점?
soft voting은 모든 분류기들의 label에 대한 확률들의 평균을 구하여 가장 높은 확률을 가진 값을 label로 결정하는 방식
모든 분류기들의 결정을 고려하므로 일반적으로 많이 씀
5. boosting
여러개의 분류기가 순차적으로 학습됨
이전 분류기가 예측에 틀린 데이터에 대해선 올바르게 예측할수 있도록 다음 분류기에 데이터의 가중치를 부여하면서 학습을 진행함
가중치를 부여하는 boosting을 하면서 학습을 진행한다고 하여 boosting이라고 이름이 붙음
보통 배깅에 비해 성능이 좋아 앙상블에서 많이 사용하고 LightGBM, XGBoost, CatBoost 등이 대표적인 boosting 알고리즘이다
그러나 순차적이고 sequential하게 학습을 해야하므로 bagging에 비해 속도가 느리고 overfitting이 발생할 가능성이 존재한다
bagging은 여러 데이터 샘플에 동일한 모델을 병렬로 학습하는 방식이고
boosting은 데이터를 샘플링한 후 첫번째 모델을 학습하고 에러에 가중치를 부여한 데이터 샘플링 후 다시 학습시키고
이 과정을 반복하여 강력한 하나의 모델을 순차적으로 학습함
bagging은 동일한 모델을 여러 샘플에 대해 병렬적으로 학습
boosting은 데이터 샘플링 후 모델 하나를 학습시키고 에러에 가중치를 둔 샘플링 후 다시 학습시키면서 순차적으로 강화해 나가는 학습
6. stacking
여러 모델을 활용해서 각각의 예측 결과를 도출한 뒤 예측결과를 결합해 최종 예측 결과를 도출하는 방식
데이터에 대해 여러 모델을 사용하여 학습한 여러개의 base learner
이 여러개의 base learner들이 학습하여 예측한 결과를 다시 training set으로 만들어 새로운 final meta model을 학습하여 최종 예측을 수행하는 방식
구체적으로 예를 들어보면 (x_train,y_train)으로부터 3개의 모델 svm, random forest, decision tree를 training시켰다
x_test에 대해서 각각 3개의 모델이 prediction하면 x_pred, x_pred2, x_pred3를 얻고 다시 (x_pred,x_pred2,x_pred3)로 새로운 training set을 만든다
final model을 ([x_pred,x_pred2,x_pred3],y_test)로 training하여 최종 예측을 수행한다
단일 모델에 비해 성능이 향상될 수는 있는데 overfitting의 위험이 있어서 보통은 cross validation 기반의 stacking을 사용한다고 함
이거 읽어봤는데 솔직히 무슨소린지 도저히 모르겠다...
보통 경진대회에서 마지막으로 성능을 짜내기 위해 사용하는 방법
요즘에는 잘 안쓰는 것 같다고함 굉장히 많은 base learner와 meta model을 조합해야해서
base 모델의 성격이 완전히 달라야 성능 향상 효과를 얻는데 그 과정이 너무 복잡하고 시간도 너무 많이 듦
현실적인 production level에서는 사실상 사용할 수 없는 비현실적인 기법
kaggle이 stacking으로 너무 성능을 올리려고 하여 비판받긴함
그래서 요즘엔 code competition으로 시간을 제한하기도 함
'정형데이터' 카테고리의 다른 글
정형데이터를 위한 딥러닝 모델 TabNet 간단하게 (0) | 2024.08.25 |
---|---|
정형데이터 분석에서 feature selection하는 몇가지 방법 (0) | 2024.04.03 |
정형데이터 분석에서 feature importance와 permutation importance (0) | 2023.12.08 |
cross validation out of fold prediction (0) | 2023.12.07 |
time series data의 cross validation에 대한 여러가지 고찰 (0) | 2022.06.28 |