머신러닝 및 딥러닝/데이터 분석

train_test_split의 random_state 의미

viamemine 2024. 5. 3. 14:06
728x90
반응형

 

scikit-learn의 model_selection 패키지 안에, train_test_split 모듈을 활용하여

쉽게 train set과 test set을 분리할 수 있습니다. 

 

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0)

 

 

그렇다면 train, test set을 분리하는 이유는 무엇일까요 ? 

학습과 검증을 위한 데이터셋을 분리하는 목적을 정확히 알아야 합니다.

 

머신러닝 모델에 train 데이터를 모두 학습시킨 후, test 데이터를 통해 예측율을 확인해보면

성능이 생각보다 안나오거나 학습 시보다 떨어지는 경우가 많습니다. 

 

이런 경우를 overfitting이라고 합니다. 

 

overfitting은, 모델이 내가 학습한 데이터에 '과적합'되어

조금이라도 벗어난 케이스에 대해서는 예측율이 떨어지는 현상을 의미합니다.

 

따라서, 모델이 overfitting이 되지 않도록 방지하기 위해

전체 데이터셋을 7.5:2.5 비율로 분리합니다. 

 

Train set이 75%, test set이 25% 입니다. 

 

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)

 

때문에 이렇게 test_size = 0.3으로 지정하며, 7:3의 비율로 나누기도 합니다.

 

여기서 random state란, 호출할 때마다 동일한 학습/검증용 데이터셋을 생성하기 위해 주어지는 난수 값입니다.

train_test_split()은 랜덤으로 데이터를 분리하기 때문에

random_state를 설정하지 않으면, 수행할 때마다 다른 학습/검증 데이터가 생성된다.

random_state를 설정하여 수행 시 결과값을 동일하게 맞춰주는 것이다. 

 

 

 

728x90