CV는 미리미리 만들어놓고 확정해놓는게 좋다.
훈련 데이터셋을 CV별로 나누는 로직¶
- CV를 나누어서 데이터셋을 미리 만들어주는것이 더 효율적이다.
- 데이터셋이 커지면, CV를 전부 돌리는것은 굉장히 부담이다. 따라서 대부분은 그냥 1CV만을 기준으로 벤치를 돌리고,
- 최종적인 모델을 만들때만 하나로 합친다.
In [1]:
import pandas as pd
import numpy as np
import os
import seaborn as sns
import os
from sklearn.model_selection import KFold
In [2]:
DIR = '../CheXpert-v1.0-small/'
OUTPUT_DIR = '../CV/'
CV_COUNT = 6
In [3]:
os.listdir(DIR)
Out[3]:
In [4]:
raw = pd.read_csv(DIR + 'train.csv')
In [5]:
frontal_df = raw[raw['Frontal/Lateral'] == 'Frontal']
lateral_df = raw[raw['Frontal/Lateral'] == 'Lateral']
폴드 나눔¶
- 층화추출을 하거나 랜덤으로 폴드를 나누면 된다.
In [6]:
splits = list(KFold(n_splits=CV_COUNT, shuffle=True, random_state=18).split(frontal_df))
In [8]:
if not os.path.exists(OUTPUT_DIR):
os.makedirs(OUTPUT_DIR)
In [11]:
for index, sp in enumerate(splits):
train_df = frontal_df.iloc[sp[0]]
test_df = frontal_df.iloc[sp[1]]
train_df.to_csv(OUTPUT_DIR + 'chest_frontal_train_cv_' + str(index) + '.csv', index = False)
test_df.to_csv(OUTPUT_DIR + 'chest_frontal_test_cv_' + str(index) + '.csv', index = False)
- 이제 모델의 정확성을 측정할때는 아래의 데이터셋중 하나의 CV로만 검증한다
In [12]:
os.listdir(OUTPUT_DIR)
Out[12]: