머신러닝이 처음이라면 DACON 101 (LV3, 13강 전처리 | 교차 검증 정의 K-Fold)

DACON AI·2021년 8월 3일
0
post-thumbnail

Lv3. 교차검증과 LGBM 모델을 활용한 와인 품질 분류하기

교차 검증 정의 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번 데이터들에 들어갔다가 나오면서, 데이터를 모두 최소한 한번씩은 학습할 수 있겠죠?

자 여기까지가 교차검증에 대한 개념이었스니다.

그럼 이제 실습으로 들어가봅시다.

오늘은 교차검증을 불러와서 저장하는 방법까지 다루겠습니다.

==================================================================

sklearn에 model_selection 부분 속 KFold를 불러와보세요

from sklearn.model_selection import KFold

KFold에 n_splits = 5, shuffle = True, random_state = 0이라는 인자를 추가해 "kf"라는 변수에 저장해보세요

kf = KFold(n_splits = 5, shuffle = True, random_state = 0)

반복문을 통해서 1번부터 5번까지의 데이터에 접근해보세요

for train_idx, valid_idx in kf.split(train) :

train_data = train.iloc[train_idx]

valid_data = train.iloc[valid_idx]

추가 코드로, 아래의 이미지를 그려볼 수 있는 코드도 있으니, Colab으로 확인해보세요~

profile
Dacon

0개의 댓글