#오늘의 파이썬 #1일1오파 #파이썬 # python

매일 오전10시 업로드, Dacon Daily Python Camp. 1일1오파 격파하기!

  • moneyIcon Prize : 교육
  • 30Team D-101520

 

Lv3 모델링 3/4 python 파이썬 교차검증

2021.07.28 09:40 967 Views

이번 시간에는 "교차검증"에 대해서 이야기해보겠습니다.


교차 검증을 이야기 하기 위해서는, 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으로 확인해보세요~

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


[Colab 실습 링크]


↩️ 오늘의 파이썬 리스트

#데이콘_101 #AI #머신러닝 #딥러닝 #파이썬 #파이선  #데이터분석 #데이터사이언티스트 #코랩 #Python  #colab #kaggle #pandas #numpy #sckit-learn # read_csv #hold-out #train_test_split #kfold #shuffle=True

세라자데
2021.09.05 19:07

done

그린티
2021.09.08 16:48

done..
하긴 했지만 뭘하고 있는지 잘 이해가 안되네,,ㅠㅠ

DSJY
2021.09.13 18:05

phu
2021.09.13 22:54

KFold(n_splits=5, shuffle=True, random_state=0)
데이터 5등분, random_state가 0인 난수 값을 사용해서 셔플(random_state 없으면 할 때마다 결과 값 변동)
기존 방식 -> train 80%, test 20%로 사용하면 test 20%는 학습에 사용 불가
KFold -> train 100%(검증 데이터 5번) 사용, test 20%로 예측

매미인턴
2021.09.16 09:07

다욤
2021.09.19 14:11

찬찬이
2021.09.25 12:02

changhyeon
2021.10.09 11:43

done

왼쪽눈썹왁싱
2021.10.31 10:11

PYB
2021.11.07 12:22

done

yulia.
2021.12.04 00:11

sotanfdl
2021.12.14 23:40

하잉바
2021.12.27 19:40

로그인이 필요합니다
0 / 1000