데이터 분할 방법 (CV만들기)

CV는 미리미리 만들어놓고 확정해놓는게 좋다.

1) chest (simple) preprocessing

훈련 데이터셋을 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]:
['train', 'train.csv', 'valid', 'valid.csv']
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]:
['chest_frontal_test_cv_0.csv',
 'chest_frontal_test_cv_4.csv',
 'chest_frontal_test_cv_2.csv',
 'chest_frontal_train_cv_3.csv',
 'chest_frontal_test_cv_3.csv',
 'chest_frontal_train_cv_0.csv',
 'chest_frontal_test_cv_1.csv',
 'chest_frontal_test_cv_5.csv',
 'chest_frontal_train_cv_5.csv',
 'chest_frontal_train_cv_2.csv',
 'chest_frontal_train_cv_1.csv',
 'chest_frontal_train_cv_4.csv']

댓글 남기기