ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [핸즈온 머신러닝 2판] 테스트 세트 만들기
    ML 2020. 9. 6. 05:15
    728x90

    본 포스팅의 내용은 핸즈온 머신러닝 2판의 p.85~p.90의 2.3.4 테스트 세트 만들기의 보충 설명을 포함하고 있습니다.

     

    p.86을 보면 다음과 같이 train_set, test_set을 split한다.

     

    이렇게 split한 test_set는 문제가 있다.

    프로그램을 실행할 때마다 다른 test_set가 생성된다는 것이다.

    첫번째 실행된 test_set
    두번째 실행된 test_set

     

    책에서는 2가지 해결책을 제시하고 있다.

    1. test_set를 최초 1회 실행할 때 저장하고, 이후 실행시에는 이를 불러온다.(파일 형태이거나 DB에 넣거나)

    2. np.random.permutation()을 호출하기 전에 seed를 지정하는 방법(ex. np.random.seed(42) )

     

    하지만 저자는 이 두 가지 방법 모두 문제가 있다고 함.

    어떤 케이스에서 문제가 발생하냐면, 데이터 이 업데이트가 되는 경우 문제가 발생한다.

    사실 이 부분 설명하려고 포스팅을 했다.

     

    다음과 같이 예시를 들어보겠다.

    최초 10,000개의 데이터를 8:2로 나누어 2,000개를 test_set로 삼았다.

    나는 이를 이용해 열심히 학습을 해서 모델을 만들어 내었다.

    그런데 다음날 데이터가 추가되어 총 데이터가 20,000개가 되었다. 이를 위의 코드로 다시 나누게되면

    8:2로 나누어, 이번에는 4,000개가 test_set이 된다.

     

    여기서 문제가 발생한다.

    1. 데이터의 양 자체가 달라져서 shuffle을 할 경우 기존에 train_set과 test_set이 뒤죽박죽이 된다.

    2. 1에서 파생되는 문제일 수 있는데, 설령 기존 test_set에 있던 데이터가 모두 다시 test_set으로 들어왔다고 가정해도, 기존에 train_set에 있던 데이터가 test_set으로 들어오게 된다. 이는 test_set을 절대 들여다 보지 않아야하는 원칙에 위배되고, 이는 overfitting을 유발한다.

     

    이를 피하기 위해 책에서는 unique하게 구분될 수 있는 id 값을 이용하여 해결하는 방법을 제시한다.

Designed by Tistory.