Skip to content

Latest commit

 

History

History
36 lines (22 loc) · 4.88 KB

5_Your_development_and_test_sets.md

File metadata and controls

36 lines (22 loc) · 4.88 KB

5 Your development and test sets

일단 앞서 언급한 고양이 사진 예제를 다시 보자. 사용자들이 모바일 앱을 실행하게 되고, 그러면 수많은 사진들을 그 앱을 통해 업로드 되게 된다. 당신은 알고리즘이 그 사진들 중, 고양이 사진을 자동으로 찾아내길 원한다.

당신의 팀은 고양이 사진(positive)과 고양이가 아닌 사진(negative)을 다운로드 해서 거대한 데이터를 구축하게 된다. 그러고 나면, 총 데이터의 70%를 학습용 으로 30%를 테스트용 데이터셋으로 분리하여, 각각의 데이터셋에서 잘 동작하는 고양이 분류 프로그램을 만들게 된다.

그런데, 이 분류 프로그램을 실제 배포할때, 성능이 상당히 나쁘다는 것을 알게 될지도 모른다.

무슨 일이 일어난 걸까?

사용자들이 업로드한 사진 과 이전에 웹에서 다운로드하여 학습용으로 구축한 데이터 의 이미지가 다르다 는 것을 발견하게 될 수 있다. 예를 들어서, 사용자들은 모바일 기기로 사진을 업로드 하기 때문에, 낮은 해상도, 흐린 픽셀집합, 밝기 문제등을 가지고 있을 수 있다. 학습용/테스트용 데이터셋은 웹에서 다운로드 되었기 때문에, 배포된 알고리즘은 실제로 신경써야 하는 모바일 기기로 부터의 사진 데이터 분포에 대하여 일반화 되어 있지 못하다 .

현대 빅 데이터의 시대가 오기 전에, 전체 데이터 중 무작위로 70%를 학습용 데이터 로, 30%를 테스트용 데이터 로 분리하여 사용하는 것이 머신러닝에서는 꽤나 일반적인 규칙이었다. 이러한 관행 은 잘 동작할 수도 있지만, 때로는 좋은 방법이 아닐 수 있다. 학습용 데이터의 분포가 실제로 이후 예측을 하고자 하는 데이터의 분포와 다른 경우가 그러하다.

다음과 같은 것을 일반적으로 정의해 볼 수 있다.

  • 학습(Training) 데이터셋: 학습 알고리즘을 수행 하기 위해 사용된다.
  • 개발(Development) 데이터셋: 파라메터의 튜닝, Feature의 선택등 학습 알고리즘에 관련된 어떤 결정 을 내리기 위해 사용된다. hold-out cross validation set 이라고 불리기도 한다.
  • 테스트(Test) 데이터셋: 알고리즘의 성능을 측정 하기 위해 사용. 하지만, 알고리즘의 튜닝과 같은 것에 대하여 어떤 결정을 내리는데 사용되면 안된다.

개발 데이터셋과 테스트 데이터셋을 정의하고 나면, 이에 대하여 수많은 아이디어를 시도해 볼 것이다. 예를 들어서, 학습 알고리즘에 들어가는 다른 파라메터값을 대입하여 어떤 것이 최고의 성능을 보여주는가를 관찰해볼 수 있다. 개발 데이터셋과 테스트 데이터셋은 알고리즘이 얼마나 잘 동작하는지 빠르게 확인하는데 도움을 줄 수 있다.

간단히 말하자면, 다음과 같이 하면 개발/테스트 데이터셋으로부터 도움을 얻을 수 있다:

  • 개발/테스트 데이터셋을 선택하자
  • 두 개의 데이터셋은 미래에 기대되는 결과를 도출하는 데이터를 잘 반영하고 있어야 한다

다시 말해보면, 테스트 데이터셋은 단순하게 전체 데이터의 30%를 추출한 것이 아니어야 한다 . 특히, 만약 미래에 사용될 데이터(모바일 기기의 이미지)가 학습용 데이터(웹 다운로드 이미지)와는 다른 경우에 조심해야 한다.

아직 모바일 앱을 출시한게 아니라면, 많은 사용자를 확보하지 못했을 것이고 미래에 당신의 알고리즘이 정확하게 동작하기 위한 데이터를 충분히 확보하지 못했을 것이다. 그러나, 당신은 아마도 추정하여 이를 수행하려고 노력할 것이다. 예를 들어서, 친구에게 고양이 사진을 찍어서 보내달라고 요청한 후, 앱을 실행하여 개발/테스트 데이터셋을 실제 사용자 데이터로부터 업데이트 할 수 있게 된다.

어떤식으로든 이러한 데이터의 확보가 어렵다면, 웹에서 다운로드된 이미지를 사용하여 일단 시작할 수도 있다. 하지만, 해당 이미지로는 일반화된 알고리즘을 만드는데 한계가 있다는 리스크를 항상 인지하고 있어야 한다.

훌륭한 개발/테스트 데이터셋을 구축하는데 얼마나 많은 비용을 사용해야 하는지에 대한 결정도 이루어 져야 한다. 그러나, 학습 데이터셋이 테스트 데이터셋과 동일한 분포를 형성할 것이라고 추측하지는 말자. 가능한한 최종적으로 사용될 데이터와 근사하도록 테스트 데이터셋을 구성하려고 노력하자.