분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
Python 튜토리얼
Lv3 모델링 3/4 python 파이썬 교차검증
이번 시간에는 "교차검증"에 대해서 이야기해보겠습니다.
교차 검증을 이야기 하기 위해서는, 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으로 확인해보세요~
==================================================================
↩️ 오늘의 파이썬 리스트
#데이콘_101 #AI #머신러닝 #딥러닝 #파이썬 #파이선 #데이터분석 #데이터사이언티스트 #코랩 #Python #colab #kaggle #pandas #numpy #sckit-learn # read_csv #hold-out #train_test_split #kfold #shuffle=True
done..
하긴 했지만 뭘하고 있는지 잘 이해가 안되네,,ㅠㅠ
✅
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%로 예측
어떻게 해야합니까?
✅
✅
✅
done
✅
done
✅
✅
✅
✅
✅
done
done
✅
done
✅
done
done
✅
✅
추가코드에서 KFold 인자 설정할 때 random_state를 설정되어 있어 오류가 발생하네요.
shuffle = False인 경우 random_state가 설정되지 않아야 제대로 결과가 나오는 것 같습니다.
✅
✅
구삼이돌격대님이 적어두신 것 처럼 기존 코드에서는 오류가 발생합니다.
KFold 에서 shuffle = False 로 하는 경우 random_state를 설정하지 않아야 오류 없이 실행됩니다.
기존 코드 ---------------------------------------------------------------
kf = KFold(n_splits = 5, shuffle = False, random_state = 0)
에러 ---------------------------------------------------------------------
ValueError: Setting a random_state has no effect since shuffle is False. You should leave random_state to its default (None), or set shuffle=True.
변경 코드 ---------------------------------------------------------------
kf = KFold(n_splits = 5, shuffle = False)
✅
✅
✅
✅
✅
done
done
done
done
✅
done+
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
done