최근 머신러닝 기초반 스터디를 진행하면서 느끼는 점이 있습니다.
또한, 이메일로 질문 받는 것중 적지 않는 질문이기도 합니다.
그 질문은 아래와 같습니다.
왜 머신러닝(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)을 나눕니다.
부디 도움이 되시길 바랍니다.
'machine learning(머신러닝)' 카테고리의 다른 글
머신러닝 앙상블(ensemble) xgboost란? - Python 예제와 함께 살펴보기 (15) | 2019.11.21 |
---|---|
윈도우10에 xgboost 설치하기 - ensemble xgboost install (4) | 2019.11.18 |
머신러닝 앙상블 부스팅(boosting) - Adaboost, Gradient Boosting (2) | 2019.11.16 |
머신러닝 앙상블 부스팅이란? - ensemble boosting (2) | 2019.11.15 |
머신러닝 bagging 앙상블 랜덤 포레스트(random forest)란? (2) | 2019.11.15 |