교차 검증 정의 K-Fold
이번 시간에는 "교차검증"에 대해서 이야기해보겠습니다.
교차 검증을 이야기 하기 위해서는, Hold-out 에 대해서 먼저 이야기 해야 합니다.
Hold-out
Hold-out은 단순하게 Train 데이터를 (train, valid)라는 이름의 2개의 데이터로 나누는 작업입니다.
보통 train : valid = 8:2 혹은 7:3의 비율로 데이터를 나눕니다.
데이터를 이렇게 나누는 이유는 무엇일까요?
바로 예측 성능을 가늠해보기 위해서 입니다.
이미지를 통해서 추가 설명드리겠습니다.
Train이 train.csv를 통해서 불러온 데이터라면,
train은 Train의 거대한 데이터를 8:2로 쪼갠 큰 부분입니다.
test(=valid)는 Train의 거대한 데이터를 8:2로 쪼갠 작은 부분입니다.
모델이 80%의 데이터를 통해서 학습하고, 20%의 데이터를 예측한다면, 어느정도의 성능이 나올지 가늠할 수 있겠죠?
다만 Hold-out의 문제점은 데이터의 낭비입니다.
데이터 사이언스에 있어서, 데이터는 소중한 자원입니다.
하지만 단순하게 trian과 test로 분할하게 된다면, 20%의 데이터는 모델이 학습할 기회도 없이, 예측만하고 버려지게 됩니다.
그래서 "모든 데이터를 학습하게 해보자!"라는 생각에서 나온 것이 "교차검증", 즉 K-Fold입니다.
교차검증
K-Fold의 아이디어는 단순합니다.
"모든 데이터를 최소한 한 번씩 다 학습하게 하자!"
그래서 valid 데이터를 겹치지 않게 나누어 N개의 데이터셋을 만들어 냅니다.
만약 데이터셋을 5개로 만든다고 하면, (== valid size가 20%) 겹치지 않게 위와 같은 모양으로 만들 수 있습니다.
그리고 반복문을 통해서 1번부터 5번 데이터들에 들어갔다가 나오면서, 데이터를 모두 최소한 한번씩은 학습할 수 있겠죠?
자 여기까지가 교차검증에 대한 개념이었스니다.
그럼 이제 실습으로 들어가봅시다.
오늘은 교차검증을 불러와서 저장하는 방법까지 다루겠습니다.
==================================================================
from sklearn.model_selection import KFold
kf = KFold(n_splits = 5, shuffle = True, random_state = 0)
for train_idx, valid_idx in kf.split(train) :
train_data = train.iloc[train_idx]
valid_data = train.iloc[valid_idx]