본문 바로가기
ML

[머신러닝&딥러닝] Train / Validation / Test 의 차이

by 조조링 2021. 2. 1.

 

머신러닝에서 '어떤 모델을 학습시킨다'라는 말은 '적절한 파라미터를 찾는다'로 해석할 수 있습니다. 

학습 목표는 보통 Cost function을 최소화시키는 것입니다. 

이번 챕터에서 나오는 신경망 학습의 '학습' 또한 훈련 데이터로부터 적절한 파라미터(;가중치)의 최적 값을 자동으로 찾는 것을 의미합니다. 학습 목표 또한 머신러닝과 동일합니다. 

 

그렇다면 훈련 데이터가 무엇인지, 어떻게 나눠지는지 먼저 알아보겠습니다

 

 

 1. Train / Validation / Test data 

 

1-1. Train data & Test data

 

데이터 분석을 한다는 것은 보통 아래와 같은 데이터가 주어지면 

 

사진 출처 : https://www.youtube.com/watch?v=fSytzGwwBVw&list=PLblh5JKOoLUICTaGLRoHQDuF_7q2GfuJF&index=3&t=0s

 

모델링을 통해 특정 규칙을 찾아 아래의 unseen data의 output을 예측하는 것이 목표입니다.

 

사진 출처 : https://www.youtube.com/watch?v=fSytzGwwBVw&list=PLblh5JKOoLUICTaGLRoHQDuF_7q2GfuJF&index=3&t=0s

 

그렇다면 예측력이 가장 좋은 모델은 어떤 모델일까요?

로지스틱? SVM? DT? KNN?

우리는 가장 적절한 모델을 찾기 위해 우리의 데이터를 train data와 test data로 나눈 뒤,

trian data에 각각의 모델로 학습시켜 test data로 각 모델의 최종 정확도를 확인합니다. 

보통은 성능이 가장 좋은 모델을 사용하죠 ( 항상 그런건 아님! )

 


Q. " 왜 굳이 train과 test로 나누는거죠?"

A. " 우리가 원하는 것은 범용적으로 사용할 수 있는 모델이기 때문입니다. " 

 

이때, train과 test로 data를 나눈 이유는

train data는 쉽게 말해 우리가 가지고 있는 정보이고

우리의 최종 목표는 우리가 가지고 있는 정보들을 가지고

unseen data를 예측 혹은 분류하는 것입니다.

하지만 unseen data는 말 그대로 아직 일어나지 않는 일의 데이터로 존재하지 않겠죠

그래서 현재 가지고 있는 data를 train과 test로 나눠서 train으로만 학습하면서 최적의 매개변수를 찾고, 

그런 다음 test를 사용하여 모델의 실력을 평가하는 것입니다. (ex. 정확도 , MSE ,... ) 

즉, 여기서 test 데이터가 unseen data역할을 하게 됩니다.


 

하지만 train과 test로만 나눴을 때 즉, 데이터셋 하나로만 매개변수의 학습과 평가를 수행한다면

큰 문제점이 있습니다. 

 

예를 들어 100개의 데이터를 오름차순 정렬을 시킨 후 4등분을 시키겠습니다.

즉, 1번은 1~25 데이터 / 2번은 26~50 / 3번은 51~75 / 4번은 76~100 이겠죠?

1,2,3번 총 75개의 데이터를 train데이터라고 하고 4번을 test 데이터라고 하겠습니다.

train데이터를 가지고 학습시킨 모델 A가 있습니다.

이 A를 test data에 적용시켜 보니 정확도가 95%가 나왔습니다.

좋은 모델이라고 할 수 있겠죠? (정확도 관점에서)

 

NOPE!

좋은 모델일 가능성이 좀 더 높을 뿐 아직 좋은 모델이라고 확정 지을 수 없습니다.

그 이유는,

test data가 A모델에 적합한 데이터일 가능성이 있기 때문입니다.

쉽게 말해, A모델을 적용하기에 깔끔한 데이터일 수도 있다는 말입니다.

다른 말로 표현하자면, 이 A모델을 다른 데이터에 적용시키면 정확도가 낮아질 수 있습니다.

그렇다면 이번에는 1,2,4번 총 75개의 데이터를 train데이터로 하고 3번을 test데이터라고 하겠습니다.

train 데이터를 가지고 학습시킨 모델 B가 있습니다.

이 B를 test data에 적용시켜 보니 정확도가 75%가 나왔습니다.

A모델보다 훨씬 정확도가 낮게 나왔죠?

단순히 train과 test를 초기에 한 것처럼 한 번만 잘라서 평가했다면 A모델을 택했을 것입니다.

더 좋은 모델을 찾을 기회조차 없이..

즉,

★ 같은 데이터 안에서도 데이터를 어떻게 자르느냐에 따라 모델이 달라질 수 있습니다. ★

 


 

​1-2. Validation 개념 

 

validation 데이터 없이 train / test로만 분리하게 되면

train으로 만든 모델을 검증하기 위해 우리는 test data만 사용할 것입니다.

이때, 고정된 test data만 가지고 모델의 성능을 확인하고, 파라미터를 수정하고, 또 확인하고, 수정하고,....

이 과정을 반복하게 되면 결국 최종 모델은 test data에만 성능이 좋은 모델이 될 것입니다.

즉, test data에 과적합(Overfit)이 되어 다른 unseen data가 들어왔을 때는 예측력이 떨어질 수 있습니다.

 

이때 나오는 개념이 Validation입니다. 

Train / Validation / Test data 3가지는 각각 모델을 학습하고 검증하고 평가하는데 목적이 다릅니다. 

 

* Train *

- 모델을 학습하기 위한 데이터셋으로 이때 학습은 최적의 파라미터를 찾는 것입니다.

- 즉, Train data는 오직 학! 습! 을 위한 데이터셋 

 

* Validation * 

- 학습이 이미 완료된 모델을 검증하기 위한 데이터셋입니다. 

- 학습이 된 여러 가지 모델 중 가장 좋은 하나의 모델을 고르기 위한 데이터셋입니다. 

- 학습 과정에 어느 정도 관여를 한다고 볼 수 있습니다. 

​- 하지만 Validation 데이터 자체가 학습에 직접적으로 관여하는 것은 아님 

 

* test * 

- 모델의 '최종 성능'을 평가하기 위한 데이터셋 

- 학습 과정에 관여를 하지 않음!!!

 

" Train으로 학습하고 Validation으로 검증하고 Test로 최종 성능을 평가한다 " 

 


1-3. 데이터 분할

보통 데이터를 분할할 때, Train:Test = 8:2 (or 7:3)으로 나눕니다.

여기서 Train 데이터 중 일부를 Validaion으로 사용하는 것이기 때문에

Train : Validation : Test = 6 : 2 : 2로 사용한다고 볼 수 있습니다. 

 

 

Train 데이터의 일부를 모델 검증에 사용하기 때문에 그만큼 학습을 시킬 데이터가 줄어들게 됩니다. 

 

Q. 학습 데이터를 희생하면서까지 Validation 데이터를 만들어야 하는 이유가 있나요?

A. 우리의 최종 목표는 범용적으로 사용할 수 있는 모델을 만드는 것이기 때문입니다. 

 

예를 들어, Train data의 성능은 좋은 반면, Validation data의 성능이 낫다면 그 모델은 train data에 과적합(;Overfitting)  되었을 가능성이 큽니다. 그래서 과적합을 막기 위해서 Train의 성능을 좀 포기하더라도 Validation의 성능과 비슷하게 맞춰줄 필요가 있습니다. 

 

Q. 전체 데이터양이 적은데도 6:2:2로 나눠야 하나?

A. 그럴 땐, Cross Validation 개념을 이용하자!

 

전체 데이터를 Train : Test = 8:2로 잘랐을 때,

Training Set을 K-fold 방식으로 쪼개서 모든 데이터를 Training과 Validaion 과정에 사용할 수 있다. 

 

자세한 내용은 

https://blog.naver.com/wkddmswh99/222024319961

 

Cross Validation

Cross Validation 개념은 올 초에 처음 접하게 되었다. 그 뒤로는 이런게 있구나 생각하고머신러닝 함수...

blog.naver.com

여기서 확인하실 수 있습니다~.~

 

 

 

 

 

 

 

 

 

 

 

댓글