-
[핸즈온 머신러닝 2판] 테스트 세트 만들기ML 2020. 9. 6. 05:15728x90
본 포스팅의 내용은 핸즈온 머신러닝 2판의 p.85~p.90의 2.3.4 테스트 세트 만들기의 보충 설명을 포함하고 있습니다.
p.86을 보면 다음과 같이 train_set, test_set을 split한다.
이렇게 split한 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 값을 이용하여 해결하는 방법을 제시한다.