본문 바로가기

Machine Learning/모델 튜닝(Model Tuning)

Model Tuning - Stacking (스태킹_CV 기반)

반응형

https://steadiness-193.tistory.com/286

 

Validation - KFold

www.kaggle.com/c/titanic/data Titanic: Machine Learning from Disaster Start here! Predict survival on the Titanic and get familiar with ML basics www.kaggle.com 캐글의 타이타닉으로 연습한다. 전처리..

steadiness-193.tistory.com

위 포스팅에서 전처리 완료한 데이터를 이용하되, 위 포스팅에선 일부 행을 삭제했지만

 

지금은 그대로 다 이용한다.

 

 

임시로 정답지가 있는 tmp_x_test와 tmp_y_test 데이터셋을 분리하고 StratifiedKFold를 불러두자.

 

점수 측정은 정확도 (accuracy_score)로 진행한다.

 

 

 

 

 

비교용 oof Ensemble (oof_pred) 만들어두기

(기존 oof ensemble)

 

 

 

아무 작업 없이 oof 앙상블만 했을 경우 정답지와 비교한 점수는 0.7985가 나왔다.

 

 

 

Stacking (스태킹)

모델의 결과를 다시 앙상블 하는 기법

모델이 예측한 y값과 실제 y값은 매우 강한 선형성을 띄는 데, 이를 이용함

- 서로 다른 모델 또는 KFold 등으로 전체 데이터셋을 예측한 y_train_pred 
- 서로 다른 모델 또는 KFold 등으로 테스트 데이터셋을 예측한 y_test_pred
* CV 스코어가 좋고 비슷한 것들 끼리 모아야함

y_train_pred를 열 방향 (axis=1)으로 연결해 이를 new_X_train으로 정의
y_test_pred를 열 방향 (axis=1)으로 연결해 이를 new_X_test로 정의

학습 : new_X_train, y_train (기존 정답)
예측 : new_X_test                                 

새롭게 학습과 예측하는 메타 모델은 XGB나 LGBM을 이용한다.

 

 

 

KFold Stacking

 

 

 

위 코드 결과 만들어지는 y_train_pred와 y_test_pred의 결과는 아래 그림과 같다.

 

그리고 여기서 필요한 것은 각 폴드의 모든 행의 1번 열이다.

 

인덱싱을 이용해 원하는 열만 추출한 뒤 전치해준다.

 

 

 

위 원리에 대한 내용은 아래 포스팅 참조

 

https://steadiness-193.tistory.com/293

 

Numpy - 3차원 배열 인덱싱

https://steadiness-193.tistory.com/50 Numpy - 3차원 axis 이해하기 3차원 텐서를 이용하기 위해 데이터를 불러온다. z는 (4행, 3열)의 2차원 데이터가 3개가 있다는 뜻이다. 위 텐서의 shape은 (3, 4, 3)으로서..

steadiness-193.tistory.com

 

 

 

new_X_train, new_X_test 정의

 

 

 

 

메타 모델로 바로 학습 및 예측

 

 

메타 모델은 LGBM보단 XGB가 조금 더 성능이 좋아보인다.

 

 

 

 

 

new_X_train, new_X_test로 한번 더 OOF Ensemble

 

메타 모델로 바로 하는 것도 좋지만 새로 만든 데이터셋으로 한번 더 oof 앙상블을 한다.

 

 

랜덤포레스트

 

중간에 스케일링만 추가되었다.

 

 

 

 

 

XGB로 OOF Ensemble

 

XGB

 

오히려 점수가 떨어졌다.

 

 

 

 

 

 

결과 비교

 

  기존 oof ensemble 스태킹 + 바로 메타모델 스태킹 + oof ensemble
정확도 0.7985 0.8022 0.8134

 

확실히 스태킹을 한 것을 다시 앙상블 해준 것이 제일 점수가 좋다.

 

 

 

이미지 참조

wikidocs.net/37001

반응형