본문 바로가기
데이터분석/머신러닝

[sklearn] train_test_split 사용하는 방법 및 유의사항

by code cleaner 2021. 5. 9.
반응형

좋은 데이터 예측 모델을 만들 때, 중요한 것은

1) 데이터 분석 목적에 맞춘 데이터 만들기

2) 데이터 전처리 잘하기

3) 훈련데이터와 테스트 데이터 잘 나누기

4) 분석 파라미터 잘 설정하기

5) 데이터 특성에 맞는 평가 지표로 평가하기


이 중에서 '3) 훈련 데이터와 테스트 데이터 잘 나누기'를 자세히 알아보자


why? 훈련데이터와 테스트 데이터를 잘 나눠야 하는 이유는?

훈련데이터에서만 우수한 예측 성능을 보이는 과대적합된 모델을 만들 수 있기 때문이다.
만약 새로운 데이터, 즉, 테스트 데이터가 들어온다면 예측 성능이 매우 낮게 될 수 있다.

What? 무슨 데이터를 나눌 수 있을까?

지도학습인 대표적인 분류 모델, 회귀 모델의 모델 등의 데이터 셋에서 훈련 데이터와 테스트 데이터를 나눌 수 있다.

How? 훈련데이터는 전체 데이터를 대표할 수 있도록 표본을 잘 뽑아야 한다.

분류 모델에서 표본을 잘 뽑기 위해서는? 라벨이 골고루 포함되어야 한다.
회귀 모델에서 표본을 잘 뽑기 위해서는? 이상치를 제외한 데이터들이 골고루 포함되어야 한다.

sklearn.model_selection.train_test_split

sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)
파라미터 설명
arrays sequence of indexables with same length / shape[0] '리스트, 넘파이 array, 스키파이 spare matrix, 판다스 DataFrame'의 데이터를 넣는다. 
test_size float or int, default=None 0~1 사이의 숫자로 test 데이터 크기를 정한다.
train_size float or int, default=None 0~1 사이의 숫자로 train 데이터 크기를 정한다.
random_state int, RandomState instance or None, default=None 난수를 생성해서 데이터의 인덱스로 train과 test 데이터를 나누는데, 이 때, 난수의 기준을 고정하여 항상 같은 데이터가 추출될 수 있도록 한다.
shuffle bool, default=True train과 test 데이터를 섞는다.
만약 섞지 않으려면, stratify 설정은 반드시 None이어야 한다.
stratify array-like, default=None 분류 모델의 데이터에서 train과 test를 나눌 때, 
각각 train과 test가 원래 데이터의 분포와 유사하게 데이터를 추출해 주는 파라미터이다. 

 

훈련데이터를 잘 뽑기 위해 stratify 파라미터를 잘 활용하자!

 


stratify 사용 안 할 때의 데이터 분할

import numpy as np
from sklearn.model_selection import train_test_split
X = np.arange(12).reshape((6, 2))
y = [0,0,0,1,1,1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

stratify  사용 안 할 때의 데이터 분할 결과

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)

stratify  사용 할 때의 데이터 분할 결과

데이터 분포에 맞춰 분할이 잘 된 것을 볼 수 있다.

 

 

 

 

 

 

반응형