AI/Fundamental

[머신러닝] 학습, 검증, 테스트 데이터 쪼개는 법 : random_split PyTorch), train_test_split(Scikit-learn)

방황하는 데이터불도저 2022. 8. 26. 11:52

1. Pytorch

* MNIST데이터를 예시로 불러와 train 데이터셋을 train과 validation 데이터셋으로 나누어 보는 작업

 

  - 데이터셋을 쪼갤 때, torch.utils.data.random_split 모듈을 활용하면 된다.

  - random_split(pytorch에서 불러온 데이터셋 변수, [len(train_dataset), len(validation_dataset)]) 로 간단하게 분리가 가능하고, 데이터를 쪼개면서 데이터를 뒤섞고 싶을 때, generator 옵션을 사용하면 된다.

    (python 내장 함수인 help를 활용하여 random_split에 파라미터들을 미리 확인할 수 있다.)

 

random_split 도움말

 

# 예시 코드

train_dataset = MNIST(os.getcwd(), download=True, transform=transform, train=True)
test_dataset = MNIST(os.getcwd(), download=True, transform=transform, train=False)

train = DataLoader(train_dataset, batch_size = 12, shuffle = True)
test = DataLoader(test_dataset, batch_size = 12, shuffle = True)
print(len(train))
print(len(test))


from torch.utils.data import random_split

train, valid = random_split(train, [4000, 1000])

print(f"train dataset length is {len(train)}")
print(f"validation dataset length is {len(valid)}")
print(f"test dataset length is {len(test)}")

 

2. Scikit-Learn

  - 참고 링크

  - 사이킷런에서 제공하는 model_selection이라는 클래스에 포함된 함수로 train_test_split을 사용할 수 있다.

    - array type 데이터셋을 넣어주어야하며, train_size, test_size에 원하는 양의 수를 넣어 쪼개면 된다.

    - shuffle로 데이터를 섞을지 말지 입력해주고,

       random_state에 입력한 숫자는 섞어준 데이터의 버전이라고 생각하면 쉽다.

    - 쪼갠 후의 데이터도 array형태임을 type() 내장함수를 통해서 확인할 수 있다.

# 예시코드

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

type(X_train)     # numpy.ndarray