02. 교차 검증
우선, overfitting 이란?
학습 데이터에만 과하게 최적화된 상태로 학습이 진행되어 정확한 예측을 할 수 없는 상태
교차 검증이 필요한 이유는?
복잡한 모델에서 overfitting이 일어날 수 있는데, 이를 방지하고 데이터 분할 시 발생하는 편향을 줄여 성능을 높이기 위해 사용
1. K-Fold 교차 검증
1) 방법
K개의 데이터 폴드 세트를 만들어서 k번만큼 각 폴드 세트에 대해 학습과 검증을 번갈아 수행하는 것이다.
만약 K=5로 지정했다면,
전체 데이터셋을 5등분 한 뒤,
첫 번째 학습 검증에서는 처음 1세트는 검증, 나머지 4세트는 학습 데이터 세트로 설정하고 평가를 진행한다.
두 번째 학습 검증에서는 2번째에 위치한 1세트를 검증, 나머지 세트는 학습 데이터로 설정하고 평가한다.
이와 같이 5번을 진행한 후, 평가의 평균으로 최종 평가를 하게 된다.
2) 한계점
만약, 불균형한 분포를 가진 데이터라면, 값의 분포가 구간마다 다를 수 있는데 이와 같이 임으로 데이터셋을 나누었을 경우 분할된 특정 데이터셋에는 값이 상대적으로 많이 들어있고, 다른 데이터셋에는 값이 적게 들어있어 학습이 잘 되지 않을 수 있다.
2. Stratified K 폴드
1) 방법
데이터 레이블의 분포를 먼저 확인한 뒤에 이를 반영하여 분포와 동일하게 데이터셋을 분할하여 이 문제를 해결한 것이 Stratified K 폴드이다. 따라서, K-Fold 교차 검증의 한계점을 해결했다고 볼 수 있다.
일반적으로 분류에서 교차 검증은 Stratified K 폴드로 분할하는 것이 좋지만, 회귀의 경우에는 연속된 숫자값이기 떄문에 Stratified K 폴드가 지원되지 않는다.
3. Cross_val_score()
1) 방법
scikit-learn에서 교차 검증을 좀 더 편리할게 할 수 있는 cross_val_score()라는 API를 제공해준다.
폴드 세트를 정하고 → train 및 test 데이터의 인덱스 추출 → 반복적으로 예측 수행 및 예측 성능을 한번에 반환해준다.
cross_val_score(estimator, X_feature, y_label, scoring=None, cv=None, n_jobs=-1, verbose=0)
estimator : Classifier / Regressor
X_feature : feature 데이터 세트
y_label : label 데이터 세트
scoring : 예측 성능 평가 지표로써 이 값을 반환
cv : 교차 검증 폴드 수
n_jobs : CPU 코어 수 지정 (n_jobs=-1 : 모든 가용 가능한 CPU 사용할 경우)
verbose : 작업 진행 상황 출력
2) 코드 구현