앞에서 우리는 주어진 데이터 세트에만 과적합한 모델을 만드는 것을 방지하기 위해서 두 개의 하위 세트(학습 세트, 테스트 세트)로 나누어 일반화 시킨 모델을 만들었습니다.


하지만 여전히 이 방법에도 문제점이 하나 있습니다. 바로 학습 세트로 학습 시키고 테스트 세트로 테스트를 진행해 초매개변수를 조정하여 얻어낸 모델이 이번에는 테스트 세트에 과적합한 모델이 될 수 있다는 것입니다.


세 개의 세트로 분할: 학습 세트(Training Set), 검증 세트(Validation Set), 테스트 세트(Test Set)

이렇게 데이터 세트를 두 개로 나누는 것 보다 더 좋은 방법이 있습니다. 주어진 데이터를 세 개의 세트로 나누는 것입니다. 데이터 세트를 학습 세트(Training Set), 검증 세트(Validation Set), 테스트 세트(Test Set)로 나누어 테스트 세트에 과적합한 모델이 될 가능성을 크게 낮출 수 있습니다.


학습 세트를 통해 학습된 모델을 바로 테스트 세트로 결과를 얻는 것이 아닌, 검증 세트를 사용하여 학습 세트의 결과를 평가합니다. 검증 세트의 결과에 따라 모델을 조정하여 가장 우수한 결과를 보이는 모델을 선택한 후, 이 모델을 테스트 세트를 사용하여 다시 평가하는 것입니다.


검증 세트를 활용한 우수한 모델 선택 과정

  1. 학습 세트로 모델을 학습
  2. 학습된 모델을 검증 세트 모델로 평가
  3. 검증 세트 결과에 따라 모델을 조정하고 다시 학습
  4. 검증 세트에서 가장 우수한 결과를 보이는 모델을 선택
  5. 그 모델을 테스트 세트로 모델을 평가

Tip

테스트 세트와 검증세트는 반복적으로 사용함에 따라 마모됩니다. 즉, 초매개변수 설정 또는 기타 모델 개선을 결정할 때와 같이 데이터를 더 많이 사용할수록 이러한 결과가 아직 주어지지 않은 새로운 데이터까지 일반화될 가능성이 낮아지게 되는 것 입니다.
(일반적으로 검증 세트보다 테스트 세트의 마모 속도가 더 빠름)

가능하면 데이터를 더 수집하여 테스트 세트와 검증 세트를 갱신하는 것이 좋습니다. 각 세트를 초기화하고 데이터 세트로 부터 처음부터 다시 설정하는 것도 좋은 재설정 방법입니다.


앞의 포스트를 통해 우리는 일반화를 하기 위해서는 주어진 데이터 세트를 두 개의 하위 세트(학습 세트와 테스트 세트)로 나눠야 한다고 했습니다.


학습 세트와 데이터 세트의 개념

  • 학습 세트(Training Set): 모델을 학습시키기 위한 데이터 세트의 일부분
  • 테스트 세트(Test Set): 모델을 테스트하기 위한 데이터 세트의 일부분

그렇다면 주어진 데이터 세트를 학습 세트와 테스트 세트로 나눌 때 몇 대 몇의 비율로 나누는 것이 좋을까요?


데이터 분할


보통 학습 세트와 테스트 세트로 나눌 때 보통 8:2의 비율이 되게 데이터 세트를 분할 합니다. 이는 데이터 분석자의 편의에 따라 임의로 조절이 가능합니다. 테스트 세트는 반드시 다음의 두 가지 조건을 만족해야 합니다.


테스트 세트의 조건

  • 통계적으로 유의미한 결과를 도출할 만큼 테스트 데이터가 커야 한다.
  • 데이터 세트를 전체적으로 나타내야 한다.
    => 테스트 세트가 한 쪽에 치우치치 않고 학습 세트와 같은 특징을 가지도록 선별해야 한다.

유의 사항: 테스트 데이터로 학습하지 말 것!

모델을 학습 시킬 때 주의해야 할 것이 있습니다. 바로 테스트 데이터로 모델을 학습시키지 않는다는 것입니다. 모델 학습은 학습 세트로만 진행하며 테스트 데이터는 일반화가 잘 되었는지 확인하는 척도로만 사용되어야만 합니다.


만약 모델의 예측 결과가 이상할 정도로 좋은 결과가 나온다면 실수로 테스트 세트로 학습을 시킨 것은 아닌지, 학습 세트에 테스트 세트가 들어간 것은 아닌지 확인을 해보아야 합니다.


학습 세트와 테스트 세트를 통해 일반화된 좋은 모델을 선택하는 과정


여기서 모델을 조정한다는 것은 초매개변수인 학습률(Learning Rate) 조절, 특성(Feature)의 추가 삭제, 완전히 새로운 모델 설계와 같이 모델에서 가능한 모든 요소를 조정하는 것을 의미합니다.

과적합(Overfit)과 일반화(Generalization)

아래의 같이 감기에 걸리 사람과 건강한 사람의 분포 데이터가 주어졌다고 가정하겠습니다. 이 데이터를 우리는 어떻게 분류할 수 있을까요?


과적합(Overfit)

아래와 같이 감기걸린 사람과 건강한 사람을 정확하게 나누는 경계를 그을 수 있을 것입니다.

정확하게 경게를 나눈다면 모델이 학습하는 동안에는 손실이 적지만, 새로운 데이터가 들어왔을 때 잘 예측을 하지 못하는 문제가 발생합니다. 이렇게 주어진 샘플을 필요이상으로 복잡하게 분류한 상태을 과적합하다라고 말합니다.


과적합한 모델: 현재 샘플에 필요 이상으로 정확한(복잡한) 모델


과적합은 모델이 새 데이터에 맞게 잘 일

아래의 그림은 과적합 모델에 새로운 데이터가 들어왔을 때 예측이 어긋나는 경우가 발생하는 것을 보여줍니다.



일반화(Generalization)

그렇다면 감기환자와 건강한 사람을 아래와 같이 나누면 어떨까요?

이렇게 단순하게 모델을 만든다면 모델을 학습시키는데 손실이 조금 발생하지만, 새로운 데이터에 대한 예측은 위에서 다룬 과적합한 모델보다는 더 뛰어날 것입니다.


이렇게 학습에 사용되는 데이터에는 조금 손실이 발생하더라도 새로운 데이터에 대해 올바른 예측을 수행하는 능력을 일반화라고 합니다.

일반화: 모델을 단순화시켜 새로운 데이터에 대한 에측성을 높이는 방법


머신러닝의 목표는 이전에 보지 못한 새 데이터를 잘 예측하는 것입니다. 즉, 학습에 사용되는 데이터에서 조금 손실을 보더라도 일반화를 통해 모델을 단순화시켜 새로운 데이터에 대한 예측 정확도를 높인다면 더 좋은 모델입니다.


어떻게 일반화(단순화) 시킬 것인가?

우리에게는 이미 발생한, 즉 주어진 데이터 밖에 갖고 있지 않습니다. 일반화를 하려면 학습 데이터 뿐만 아니라 새로운 데이터가 필요로 합니다. 그렇다고 새로운 데이터가 발생할 때마다 학습시켜 모델을 일반화 하는 것에는 한계가 있습니다.

그래서 우리는 주어진 데이터는 두 세트로 나누어 모델을 학습시키고 마치 새로운 데이터가 주어진 것처럼 테스트를 하여 일반화를 진행 할 수 있습니다.
  • 학습 세트(Training Set): 모델을 학습시키기 위한 데이터 세트
  • 테스트 세트(Test Set): 모델을 테스트하기 위한 데이터 세트

좋은 일반화를 하려면 테스트 세트가 다음의 조건을 만족해야 합니다.
  • 테스트 세트의 데이터가 충분히 많아야 한다.
  • 같은 테스트 세트를 반복해서 사용하지 않는다.

일반화를 하기 위한 전제 조건

모델을 일반화 하기 위해서는 다음의 세 가지 전제 조건을 총족해야 합니다.

  • 데이터를 독립적이고 동일하게(Independently and Identically => i.i.d) 추출해야 한다.
    즉, 각 예(Example)가 서로 영향을 미치지 않아야 한다.
  • 데이터가 변하지 않아야(Stationary) 합니다.
  • 같은 집단(Same Distribution)에서 데이터의 예를 추출해야 합니다.


+ Recent posts