티스토리 뷰
스태킹(Stacking)은 개별적인 여러 알고리즘을 서로 결합해 예측 결과를 도출한다는 점에서 배깅 및 부스팅과 비슷합니다. 가장 큰 차이점은, 개별 모델이 예측한 데이터를 기반으로 다시 예측을 한다는 점입니다. 즉, 각 모델의 예측 결과를 모아 메타 데이터 세트를 만든 뒤, 별도의 모델로 해당 데이터 세트를 학습하고 최종 테스트 데이터에 대해 예측을 수행합니다.
스태킹 앙상블을 위해 개별적인 기반 모델들과, 메타 모델이 필요합니다. 스태킹 앙상블을 현실 문제에 적용하는 경우는 많지 않지만, 캐글과 같이 조금이라도 성능 수치를 높여야 하는 상황에서 자주 사용됩니다. 스태킹을 하려면 많은 개별 모델이 필요합니다. 2~3개의 개별 모델만으로는 예측 성능이 쉽게 향상되지 않으며, 스태킹 자체가 반드시 예측 성능을 향상시킨다는 보장도 없습니다. 일반적으로 성능이 비슷한 모델 여러 개로 조금 더 나은 최종 모델을 만드는 상황에서 쓰입니다.
스태킹을 구현한 코드를 통해 동작 방식을 더 명확히 알아봅시다.
학습할 데이터 세트는 위스콘신 유방암 데이터입니다. 스태킹을 위한 4개의 개별 모델을 학습시킵시다. 각 모델은 KNN, 랜덤 포레스트, 결정 트리, 에이다부스트입니다.
학습 데이터 세트로 각 모델을 학습시킵니다.
학습된 각 모델에 대해 테스트 데이터를 예측하도록 합니다. 예측 결과를 통해 각 모델의 예측 성능을 평가할 수 있습니다.
각 모델의 예측 결과를 모은 후, 칼럼 별로 각 모델의 예측 결과가 있도록 합시다.
각 모델의 예측 결과를 합친 데이터를 피처 데이터로, 테스트 레이블 데이터를 레이블 데이터로 메타 모델을 학습시킵니다. 메타 모델의 예측 성능은 각 개별 모델의 예측 성능보다 높은 약 0.97입니다.
위와 같은 메타 모델은 최종 학습 시 레이블 데이터로 테스트 레이블 데이터를 사용하기 때문에 과적합에 취약합니다. 반면 CV 세트 기반의 스태킹은 과적합을 개선하기 위해 각 기반 모델 학습 시 교차 검증을 통해 메타 모델을 위한 학습 데이터 세트를 만들어냅니다.
먼저, 개별 모델을 학습할 때 교차 검증 과정에서 메타 모델을 위한 학습 데이터를 만드는 과정(Step 1)을 살펴봅시다.
설명의 편의상 3 Fold 교차 검증이라 합시다. 검증은 총 3번 수행될 것입니다. 각 검증마다, 모델은 2개의 폴드를 학습 데이터로 사용하고, 검증 데이터 폴드에 대해 예측을 수행할 것입니다. 이때 검증 데이터에 대한 모델의 예측값은 메타 모델을 위한 학습 데이터로 사용할 것입니다. 또한, 모델은 테스트 데이터에 대해서도 예측을 수행합니다. 그 예측 결과는 메타 모델을 위한 테스트 데이터로 사용될 것입니다.
Step1은 각 기반 모델마다 수행되는 것입니다. 그러므로 스태킹에 참여하는 기반 모델이 4개라고 한다면, 각 기반 모델이 만들어낸 메타 학습 데이터와 메타 테스트 데이터를 또 한번 모아 메타 모델을 위해 사용합니다. 메타 모델의 학습 레이블은 원본 학습 레이블입니다. 또한 메타 모델의 테스트 레이블은 원본 테스트 레이블입니다. 메타 모델은 메타 테스트 피처에 대해 예측을 하고, 예측 결과는 원본 테스트 레이블과 비교되어 메타 모델의 예측 성능이 평가됩니다.
이러한 cv 스태킹 과정을 코드로 실습해봅시다.
Step1을 구현한 코드입니다. 각 모델은 위의 메서드로 학습됩니다. 학습 과정에서의 교차 검증 시 메타 모델을 위한 메타 학습 데이터와 메타 테스트 데이터를 만들어서 반환합니다.
각 기반 모델을 학습시킵니다. 폴드의 개수는 7개로 정했습니다.
각 기반 모델의 결괏값들을 모아 메타 학습 데이터와 메타 테스트 데이터를 구성합니다.
메타 모델의 학습은 메타 학습 데이터와 원본 학습 레이블 데이터로 진행됩니다. 학습 후 모델은 메타 테스트 데이터를 예측하고, 그 결과는 원본 테스트 레이블과 비교되어 메타 모델의 예측 성능이 평가됩니다.
개별 모델은 따로 하이퍼 파라미터 튜닝을 하지 않은 상태이지만, 일반적으로 기반 모델은 하이퍼 파라미터가 튜닝된 상태에서 스태킹에 참여하는 것이 일반적입니다. 스태킹 모델의 하이퍼 파라미터를 튜닝한다는 것은 곧 각 기반 모델의 하이퍼 파라미터를 튜닝한다는 뜻입니다. 스태킹 모델은 분류뿐만 아니라 회귀에도 적용이 가능합니다.
'파이썬 머신러닝 완벽 가이드' 카테고리의 다른 글
파이썬 머신러닝 완벽 가이드 : 사이킷런 회귀 클래스를 이용한 보스턴 주택 가격 예측 (0) | 2023.05.11 |
---|---|
파이썬 머신러닝 완벽 가이드 : 회귀(Regression) (0) | 2023.05.10 |
파이썬 머신러닝 완벽 가이드 : 캐글 신용카드 사기 검출 분류해보기 (0) | 2023.05.06 |
파이썬 머신러닝 완벽 가이드 : XGBoost, LightGBM으로 캐글 산탄데르 고객 만족 예측해보기 (0) | 2023.05.05 |
파이썬 머신러닝 완벽 가이드 : 베이지안 최적화 기반의 하이퍼 파라미터 튜닝 (0) | 2023.05.03 |