하나의 데이터셋으로 한번만 train, val, test를 진행하면 과적합 문제가 생길 수 있다.
가장 쉽게 발생하는 문제는, train, val은 95%가 나오지만 test에서 70%의 정확도가 나는 문제이다.
과적합은 모델을 너무 정교하게, 너무 많은 feature를 사용해서 만들 때 생기거나 데이터 갯수가 적거나 할 때 잘 생기는 문제이다.
가장 좋은 방법은 데이터를 늘리거나, 모델을 조금 더 간단하게 만드는 방법이 있다.
하지만 데이터를 추가적으로 확보하는게 쉬운 일은 아니다. 그렇기 때문에 교차 검증
방법이 필수적이라고 할 수 있다.
Hold out 기법은 데이터를 train, test 로 나누는 가장 간단하고 일반적인 방법이다.
랜덤추출로 생성하며 train과 test의 비율은 임의로 지정할 수 있다.
Train, Validation, Test 세개로 나눠서 사용하는 방법도 있는데, 이 방법에서 유의해야할 점은 train set에 들어간 데이터는 validation에선 사용되면 안된단 점이다.
이미 학습에 사용된 데이터는 당연히 예측이 잘 될것이기 때문이다.
validation이 필요한 이유는 hyper parameter tuning 때문이다.
hyper parameter는 모델 학습도중 자동으로 tuning되는 일반 parameter들과 달리 사용자가 지정해줘야하는 parameter인데, validation을 사용해 각 epoch마다 hyper parameter를 수정해서 최적의 값을 찾아낸다.
데이터를 k개의 fold로 나누어서 1개의 fold는 test, 나머지는 train으로 사용하는 방법.
1번 fold를 test로 삼고 나머지를 학습해서 1번 fold로 모델을 평가한 뒤, 2번 fold를 test로 고르고 나머지를 학습시켜 다시 정확도를 구해보는 방식을 k번 반복한다.
그렇게 나온 정확도들의 분산이 크지 않다면 정확도들의 평균을 사용한다.
물론 k-fold에서도 k개의 fold에서 하나는 val, 하나는 test로 사용할 수 있다.
LOOCV는 leave one out cross validation으로, test를 단 한개의 데이터로 시행하고 나머지로 학습을 하는 것이다.
정확도가 높아질수는 있지만, 너무 오래걸린다는 단점이 있다.
parameter와 hyper parameter의 가장 큰 차이점은 사용자가 직접 변경해주어야한다 아니다로 구분지을 수 있을 것 같다.
parameter는 데이터로 인해서 값이 모델 내부에서 결정되고 수정된다.
parameter는 사람이 조작할 수 있는 것이 아니며 모델을 사용할 때 최적화를 위해서 학습중 모델이 자체적으로 변경하는 변수이다.
Hyper parameter는 모델이 자체적으로 변경할 수 없어 사용자가 직접 설정해주어야하는 매개변수이다.
hyper parameter들이 여러가지라면 hyper parameter끼리의 최적의 조합이 존재할 것이다.
예를 들면 x, y, z라는 hyper parameter가 존재할 때, x의 후보군과 y의 후보군, z의 후보군중에서 골라 최적의 예측치가 나오는 조합을 찾는 것이다.
그렇기 때문에 후보군들이 클수록 시간이 오래걸린다는 단점이 있다.