앙상블 기법(Ensemble methods)
- 다양한 분석 방법론을 조합해 하나의 예측 모형을 만드는 지도학습 방법론
- 앙상블은 다양한 분석 방법론을 조합하기 때문에 해석이 어렵지만, 보다 우수한 예측 성능을 갖는다는 장점을 가짐
- 이는 실생활에서 중요한 결정을 앞두고 여러가지 의견을 모으고 종합해 최종결정을 하는 것과 유사함
- 예측을 통해서 모델 4개가 예측치를 1, 1, 2, 1로 뽑았다면 다수결의 원칙으로 1을 예측 결과로 반환
앙상블의 특징
- 단일 모델의 약점을 다수의 모델들을 결합하여 보완
- 성능이 떨어지더라도 서로 다른 유형의 모델을 섞는 것이 전체 성능에 도움이 될 수 있음
- 예측기가 가능한 서로 독립적일 때 최고의 성능을 발휘함
- 서로 다른 알고리즘으로 학습시키면 서로 다른 종류의 오차를 만들 가능성이 높기 때문에 정확도를 향상시킨다.
- 랜덤포레스트 및 뛰어난 알고리즘들은 모두 결정 트리 알고리즘 기반 알고리즘으로 적용함
- 결정트리의 단점인 과적합을 수십~수천개의 많은 분류기를 결합해 보완하고, 장점인 직관적인 분류 기준은 강화됨
- 정형데이터를 다루는데 가장 뛰어난 알고리즘(비정형 데이터 : 신경망)
- 랜덤포레스트, 그래디언트 부스팅 알고리즘
- XGBOOST, LIGHGBM
앙상블 방식, 유형
- 보팅(Voting)
- 동일데이터, 서로 다른 알고리즘, 최종결정은 보팅(투표)
1) 하드 보팅 : 각 분류기가 예측한 결과를 다수결로 최종 class 결정
2) 소프트 보팅 : 각 분류기가 예측한 확률을 평균하여 결정하는 방식
- 일반적으로는 확률이 더 높은 투표에 비중을 더 두는 소프트 보팅이 하드 보팅보다 예측 성능이 상대적으로 우수
⎼ 사이킷런은 VotingClassifier 클래스를 통해 보팅을 지원
- 배깅(Bagging)
- 서로 다른 데이터 샘플링, 중첩을 허용, 같은 알고리즘 최종 결정은 보팅(동일)
- 부트 스트랩 분할 방식 : 원본 학습 데이터에서 데이터를 샘플링해서 추출하는 방식, 중복을 허용(복원 추출)
Bootstraping 표본 추출(sampling) 방법
- 부트 스트래핑(bootstrapping)이라고도 하는 표본 추출 방법
- 주어진 데이터에 대해 사전 설정한 비율에 따라 복원 추출, 표본을 뽑고 다시 하는 방법
- 가령 100개의 관측치가 있을 때, 첫번째 추출로 선택된 관측치가, 두번째 표본 추출시에도 포함 될 수 있음.(즉 각 관측치에 대한 표본 추출확률은 모두 0.01 = 1/100으로 동일)
- 부트스트랩 표본 추출 방법을 이용하면 전체 데이터를 이용해 하나의 모델로 만드는 것보다 안정적인 예측 또는 분류 결과를 얻을 수 있음
- OOB 평가(Out of Bag)
- Bagging으로 샘플링할 때 선택되지 않은 샘플(일반적으로 37%)을 검증 데이터로 사용함
- 예측기마다 남겨진 샘플이 모두 다름
- 앙상블의 경우, 각 예측기의 oob 평가를 평균하여 사용
- sklearn의 경우 객체 생성시 oob_score=True로 설정하여 학습 후 자동으로 oob평가를 수행시킬 수 있다
- Bagging으로 샘플링할 때 선택되지 않은 샘플(일반적으로 37%)을 검증 데이터로 사용함
실습
vo_df = VotingClassfier()
앙상블 기법2) 배깅(bagging)
배깅(bagging : Bootstrap AGGregatING)
- Bootstrap 샘플링을 통한 voting을 통한 앙상블 예측기
- 최종 예측을 하 는 점은 voting과 동일
⎼ 학습할 데이터를 추출하는 방식에서 차이: 부트스트랩(bootstrap)이란 표본 추출 방법(복원 추출)을 이용해 각 모형의 다양성을높여 앙상블 하는 방법
⎼ 같은 종류의 알고리즘 모델을 여러 개 결합하여 예측
⎼ 각각의 모델에 전체 학습 데이터 중 서로 다른 데이터를 샘플링하여 학습하는 점이 보팅과 차이
⎼ 앙상블 모형으로 주로 결정트리 모형이 많이 쓰임.
⎼ sklearn.ensemble.BaggingClassifier
랜덤 포레스트
- 결정 트리를 기반으로 한 대표적인 배깅 방식
- 앙상블 알고리즘 중 비교적 빠른 수행속도
- 다양한 영역에서 높은 예측 성능을 보임
- 연속형 및 범주형 모두에 사용 가능
- sklearn.ensemble.RandomForestClassifier(Regressor)
- 서브세트를 3으로 지정한 경우(n_estimators=3) 서브세트의 데이터 건수는 전체 데이터 건수와 동일하지만, 개별 데이터가 부트스트랩 방식으로 임의로(random) 중첩되어 만들어짐
- 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측 결정을 수행
- 트리 모형이 가지 분할 할 때마다(알고리즘의 각 단계마다) 임의로(Random) 결정된 전체 변수들의 부분 집합(p개)에 한정되고 해당 집합 내에서만 가지 분할 변수를 고려
- 랜덤하게 선택한 샘플과 특성을 사용하므로 훈련세트에 과대적합되는 것을 막아줌.
- 기본 트리수(n_estimators = 100)
- 기본 특성수: 전체 특성갯수의 제곱근(분류일 경우)
부스팅(Boosting)
- 여러개의 약한 학습기를 순차적으로 학습
- 이전 모델이 잘못 예측한 데이터에 대한 예측 오차를 줄일 수 있는 방법으로 다음 모델을 계속 업데이트 하면서 연속적으로 생성함
- 여러 모델이 동시에 학습하지 않고 순서대로 학습하는 점에서 배깅과 차이
- 배깅과 마찬가지로 결정트리를 가장 많이 사용
- 배깅은 상대적으로 튜닝 필요성이 낮고 부스팅은 튜닝 개선 가능성이 높다
부스팅 대표모델
- AdaBoost 잔차에 따라 가중치를 조절하는 부스팅의 초기 버전
- GBM(GradientBoostMachine) : 비용함수를 최소화하는 방향으로 부스팅을 활용하는 좀 더 일반적인 형태
- 확률적 그래디언트 부스팅(StochasticGB):각 라운드마다 레코드와 열을 재표본추출
- XGBoost 모델: SGB 중 하나
- kaggle,Dacon 등 경진대회에서 가장 많이 사용되는 알고리즘.
- 모델 학습 속도가 빠르고 예측력이 상당히 좋은 편
- LightGBM
부스팅 알고리즘 작동원리
bagging과 boosting의 차이
Adaboosting
- 이전 모델의 오류 데이터에 가중치를 부여하여 오류를 개선해나가면서 학습
- 아주 얕은 결정트리 기반(max_depth = 1, 부모노드 1, 자식노드 1)
- 이전 모델이 학습하고 평가된 후에 다음 예측기 학습이 가능하기 때문에 병렬화 할 수 없어 확장성이 높지 않고 느리다.
'머신러닝 및 딥러닝 > 머신러닝' 카테고리의 다른 글
스태킹 앙상블(Stacking Ensemble, 블렌딩) (0) | 2023.02.14 |
---|---|
Gradient Boosting(GBM), LGBM, XGBOOST (0) | 2023.02.13 |
결정트리 이론 (0) | 2023.02.10 |
로지스틱 회귀 이론(분류), 분류 성능평가지표 (0) | 2023.02.09 |
규제가 있는 선형회귀 - 라쏘, 릿지, 엘라스틱넷 회귀 (0) | 2023.02.09 |