관리 메뉴

꿈 많은 사람의 이야기

머신러닝, 딥러닝에서 데이터를 나누는 이유 - X_train, X_test, y_train, y_test이란? 본문

machine learning(머신러닝)

머신러닝, 딥러닝에서 데이터를 나누는 이유 - X_train, X_test, y_train, y_test이란?

이수진의 블로그 이수진의 블로그 2019. 11. 17. 19:30

최근 머신러닝 기초반 스터디를 진행하면서 느끼는 점이 있습니다.

또한, 이메일로 질문 받는 것중 적지 않는 질문이기도 합니다.

그 질문은 아래와 같습니다.

 

왜 머신러닝(machine learning), 딥러닝(deep learning)에서는 데이터를 나누나요?

도대체 X, y는 뭐고 feature는 뭐죠? X_train, X_test, y_train, y_test는 뭐죠?

 

정말 원초적인 질문이지만, 당연히 궁금해 할 질문입니다.

data science가 이제 인기를 끌면서 많은 분들이 Python을 배우시고 Python을 활용한 데이터 분석과 머신러닝, 딥러닝을 하고 있습니다.

하지만, 너무 급하게 너무 빠르게 배우느라 기본적인 것들을 놓치는 것 같습니다.

그래서 이러한 질문이 계속 오기 때문에 

머신러닝(machine learning)과 딥러닝(deep learning)에서 데이터를 나누는 이유에 대해서 포스팅을 하려고 합니다.

그리고 X_train, X_test, y_train, y_test란 무엇이고 왜 이렇게 나누는지 설명하려고 합니다.

 

왜 머신러닝, 딥러닝에서 데이터를 나눌까?

머신러닝과 딥러닝에서 데이터를 나누는 이유에 대해서 먼저 설명할까 합니다.

보통, 머신러닝 딥러닝에서 데이터는 train, validation, test 이렇게 3가지로 데이터를 나눕니다.

그리고 각 데이터는 각자의 역할이 있습니다.

 

 

그것에 대한 생각은 machine learning, deep learning 모델이 어떻게 만들어지는가?로 넘어가야 합니다.

위 그림을 보시면 아시겠지만 3가지 data set은 각자의 역할이 있습니다.

 

1. train data와 validation data

 

먼저, train과 validation data는 training 과정에서 사용합니다. 

training 과정에서 모델을 중간 중간 평가를 해야합니다.(이 모델이 잘 학습이 되는지 안되는지)

그 때 train data로 이 training 과정을 진행합니다.

그리고 이 training 과정에서 중간 중간 평가하는 것을 validation data가 해줍니다.

즉, training 과정에서의 주 데이터는 train data이고 모델이 잘 학습이 되는지, 안되는지 'training' 과정에서 확인하고 검증하기 위해서 validation data를 사용합니다.

그리고 그 결과 최종 모델이 나오게 됩니다.

 

2. test data

그렇게 해서 모델이 잘 나왔다고 가정합니다.

 

딥러닝 모델 훈련 과정

 

위 사진처럼 epoch가 증가될 수록 val_loss(validation loss)도 감소되고 val_acc(validation accuracy)가 증가되고 있습니다. 즉, training 과정에서 train data와 validation data로 평가를 하며 모델을 training 하고 있는데 나름 잘 진행이 되고 있습니다.

근데 이렇게 나온 모델이 과연 정답일까요?

아닙니다.

실제로 이 모델이 train data와 validation data를 통해서 훈련이 되었는데

최종적으로 모델이 '한 번도 보지 못한 데이터'에 대해서 평가를 해봐야 합니다.

그래야 이 모델이 현실 세계에서, 우리의 서비스에서 실제로 잘 동작될 지 동작이 안 될지 판단할 수 있을겁니다.

이때 사용하는 것이 test data입니다.

즉, test data는 모델을 평가할 때 단 1번만 사용되며, 최종적으로 모델 평가 지표가 됩니다.

 

이 test data에서 나온 모델의 정확도 등의 metrics가 우리 서비스에 적용할 수 있을지 등의

모델의 '평가' 지표가 된다는 것입니다.

 

그렇기 때문에 머신러닝 혹은 딥러닝 모델을 훈련할 때 train, validation, test 데이터로 나눕니다.

 

그러면 X_train, X_test, y_train, y_test의 의미는 무엇일까요?

일반적으로 데이터는 train.csv, test.csv로 나누어져 있다고 가정합니다.

방금 설명드린 것처럼 test.csv는 최종적으로 단 1번만 사용하는 data입니다.

그러면 train.csv를 통해서 train data와 validation data를 나누어야 합니다.

그래서 파이썬 사이킷런(Python scikit learn)에서는 train_test_split 이라는 메소드를 제공해주죠.

그러면 X_train, X_test, y_train, y_test가 return 되게 됩니다.

 

상황에 따라 다르겠지만, train.csv, test.csv가 나누어진 상황이라고 하면

X_train, y_train은 train data가 되겠죠?

X_test, y_test는 validaion data가 되겠죠?

그리고 test.csv에 있는 데이터는 test data가 될겁니다.

그래서 종종 X_train, X_val, y_train, y_val 로 하시는 분들도 많습니다. 혼동이 있으니까요.

이것은 상황에 따라 다릅니다!

 

그럼 처음 하시는 분들은 저 X, y가 무엇이냐? 라고 생각하실 수도 있습니다.

아래 사진을 보시죠

 

 

보통 우리가 수학을 배울 때 y = ax + bx.. 등을 배웠을 겁니다.

여기서 y는 종속변수이고 x는 독립변수이죠?

즉, 여러 X들로 인해 정해지는 값이 y가 됩니다!

머신러닝과 딥러닝에서의 X, y도 마찬가지입니다. 

위 사진은 iris data인데요. iris는 3개의 품종으로 나누어집니다.

즉, 3개의 품종(0, 1, 2)가 y이고 그것을 결정해주는 feature가 X가 되죠. 여기서 X는 4개가 되고 이것은 즉, feature가 4개가 있다 라고 말할 수 있습니다.

이러한 X들의 성향때문에 y가 정해지고 오른쪽 그림과 같이 각 특징에 맞는 분포를 보여주게 됩니다.

그러면 위 그림에서 X_train, X_test, y_train, y_test는 무엇이죠?

이렇게 될 겁니다.

 

X는 feature를 뜻합니다. 그리고 train.csv에서 train과 test로 나누게 되죠.

그래서 train쪽 X를 X_train이 됩니다. 마찬가지로 train쪽 y를 y_train이 됩니다.

그리고 test쪽 X를 X_test가 됩니다. 역시 test쪽 y는 y_test가 되겠죠.

 

이러한 이유로 machine learning과 deep learning에서 데이터를 3가지 (train, test, validation)을 나눕니다.

부디 도움이 되시길 바랍니다.

 

0 Comments
댓글쓰기 폼