기계학습 훈련 데이터 구성 방법

기계 학습으로 분석 모형을 만들기 위해서는 학습을 위한 데이터가 필요합니다. 보통 원래의 전체 데이터 셋에서 두 종류의 데이터로 구분해서 실험을 합니다.

  • 학습을 위한 데이터 셋 (training data)
  • 학습된 모델 검증을 위한 테스트용 데이터 셋 (test data)

이번 포스팅에서는 싸이킷런에서 제공하는 실험 데이터 구성을 지원하는 함수들을 살펴보겠습니다. 아래 설명되는 실험 데이터 구성 방식은 로보리포트의 기계학습 툴킷에서 그대로 사용이 가능합니다.

train_test_split 함수

train_test_split 함수는 전체 데이터셋 배열을 받아서 랜덤하게 훈련/테스트 데이터 셋으로 분리해주는 함수입니다. 함수 정의는 아래와 같습니다. 참고로 함수에 대한 자세한 설명은 링크에서 확인 가능합니다.


from sklearn.model_selection import train_test_split


sklearn.model_selection.train_test_split(array*, test_size, train_size, random_state, shuffle, stratify)[source]

필수 인자 값으로는 데이터들을 받습니다. 데이터는 list, arrays, matrics, dataframe 등 다양한 형태를 포함합니다. 클래스 값을 포함하여 하나의 데이터로 받을 수도 있고 클래스 값을 분리해서 두개의 데이터로도 받을 수 있습니다.

  • 클래스 값을 포함하여 하나의 데이터로 받는 경우

df_train, df_test = train_test_split(df, test_size=0.4, random_state=0)

  • 클래스를 개별의 배열로 받는 경우

train_x, test_x, train_y, test_y = train_test_split(X, Y, test_size = 0.5)

아래 다른 파라미터들은 다 옵션으로 선택 가능합니다.

test_size는 float, int 또는 None값을 사용합니다. 0에서 1의 값(float)을 입력하면 전체 데이터 셋에서 test set의 비율을 의미합니다. 0.3을 입력할 경우 전체 데이터의 30%를 랜덤하게 테스트로 사용합니다. 정수 값(int)을 입력하면 데이터 개수를 의미합니다. None을 입력하고 훈련 데이터 셋 사이즈를 지정할 경우 훈련 데이터셋을 뺀 나머지를 테스트 데이터로 사용합니다. 기본 값은 0.25입니다.

train_size는 float, int 또는 None값을 사용합니다. 0에서 1의 값(float)을 입력하면 전체 데이터 셋에서 train set의 비율을 의미합니다. 0.3을 입력할 경우 전체 데이터의 30%를 랜덤하게 훈련 데이터로 사용합니다. 정수 값(int)을 입력하면 훈련에 사용될 데이터 개수를 의미합니다. None을 입력하고 테스트 데이터 셋 사이즈를 지정할 경우 테스트 데이터셋을 뺀 나머지를 훈련 데이터로 사용합니다. 기본 값은 None입니다.

random_state는 int, randomstate instance 또는 None 값을 사용합니다. 정수 값을 입력하면 숫자를 random하게 생성할때 사용되는 seed 숫자로 사용되며, None을 입력하면 np.random에서 제공하는 random number generator가 사용됩니다.

shuffle은 bool 값으로 데이터를 분리하기 전에 데이터를 셖을 것인지 지정하며 기본값은 True이다.

stratify는 훈련/테스트 데이터들이 원래의 input dataset의 클래스의 비율과 같은 비율을 가지도록 할 것인지 지정한다. 예를 들어 0,1의 클래스가 input dataset에 20:80 비율로 있었다면 훈련 데이터와 테스트 데이터 역시 각각의 클래스가 같은 비율로 있도록 지정할 수 있다. 

이런 식으로 데이터를 비율 등으로 간단하게 데이터를 분리하여 실험 데이터를 구성할 수 있습니다. 다음 포스팅에서는 k-fold validation 방식을 설명하겠습니다 : )

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다