본문 바로가기

Machine Learning/검증(Validation)

Validation - StratifiedKFold (Cross Validation)

반응형

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

위 포스팅에서 만든 데이터셋을 이용하며

 

class imbalance 상황에서 썼던 KFold의 단점을 보완하는 방법을 알아보자.

 

 

Stratify KFold

분류할 클래스의 비율이 다르다면 이를 반영해서 k개의 fold를 해야한다.

Stratify KFold는 k개의 fold를 분할한 이후에도 전체 훈련 데이터의 class 비율과 

각 fold가 가지고 있는 클래스의 비율을 맞춰준다.



파라미터

n_splits : Fold의 개수 k 값 (정수형, 기본 : 5)

shuffle : 데이터를 쪼갤 때 섞을지 유무 (True/False, 기본 : False)

random_state : 난수 설정

 

위 그림처럼 4개의 fold가 클래스의 비율을 고려해 조금씩 나눠가진 경우를 볼 수 있다.

 

 

 

 

 

StratifiedKFold, class 비율 확인

 

 

총 5조각으로 나눴으며 이 때 train은 603개, valid는 151개이다.

 

KFold와는 달리 class가 1과 0인 비율이 거의 고정적이다.

(train : 164 / 439   ||   valid : 41 / 110) 

 

 

 

 

 

KFold 와 StratifiedKFold 비교

 

 

이전 포스팅에서 봤던 것 처럼 KFold는 들쑥날쑥하지만

 

StratifiedKFold는 고정적인 비율을 보여준다.

 

 

 

 

 

 

StratifiedKFold를 이용한 Cross Validation

 

 

분류의 성능은 f1_score로 측정한다.

 

 

각 fold마다 603개의 X_train과 y_train으로 학습을 하고

 

151개의 X_valid를 예측한 뒤,

 

그 예측값을 (y_pred) 실제 y_valid와 비교한 f1 score를 측정한다.

 

 

n_splits를 5로 설정했으므로 총 5번을 실시하며

 

각 fold 마다 나온 score를 평균 낸 점수를 최종 validation score로 정의한다.

 

 

 

StratiFiedKFold를 이용한 validation score는 0.6947점으로 나왔다.

 

 

참조

scikit-learn.org/stable/auto_examples/model_selection/plot_cv_indices.html#sphx-glr-auto-examples-model-selection-plot-cv-indices-py

반응형

'Machine Learning > 검증(Validation)' 카테고리의 다른 글

Validation - OOF Ensemble (Out-of-Fold)  (2) 2020.09.23
Validation - Voting Ensemble (VotingClassifier)  (0) 2020.09.22
Validation - GridSearchCV  (0) 2020.09.22
Validation - KFold  (0) 2020.09.21