[이 자료는 Coursera Stranford University Andrew Ng 교수님의 강의 자료를 활용하였습니다.]
* Deciding What to Try Next
지금까지 선형회귀 모델과 로지스틱회귀 모델 그리고 뉴럴네트워크의 구현방법에 대해 알아왔다면 그 다음엔 무엇을 해야할까요? 내가 잘 만들었다고 생각한 알고리즘이 예측을 하는데 있어서 어떤 오류를 가지고 있다면 그 오류가 무엇이고 어떻게 수정해가야 할 지 아는것이 중요하다고 생각합니다.
자신의 학습 알고리즘이 에러를 갖는다면 누군가는 위와 같은 몇가지 해결방법을 제시할 수 있을것입니다.
Machine learning diagnostic 은 학습 알고리즘 성능향상을 위한 일종의 테스트 입니다. 무엇이 작동하고 작동하지 않는지를 점검합니다. 이런 디버깅 단계는 시간이 오래걸릴 수 있지만 알고리즘을 향상을 위해 필요합니다.
* Evaluating a Hypothesis
가설함수가 작은 오차를 갖고 있지만 그것이 오버피팅 때문인지 어떻게 확인해볼 수 있을까요? 아래 그림을 보겠습니다.
가지고 있는 training set 을 7:3 비율로 나눠서 7을 학습 데이터로 남기고 3을 테스트 데이터로 사용해보겠습니다. 학습 데이터는 데이터 편향을 피하기 위해 전체 데이터 셋중 랜덤으로 7의 비율만큼을 골라야 합니다. 테스트 셋을 구분하기 위해서 subscript에 test라고 적어 데이터를 구분하였습니다.
선형회귀 모델에서의 학습/테스트 절차에 대해 보겠습니다. 학습 셋으로 코스트 함수를 줄이는 theta를 구한다음 테스트 셋으로 코스트 함수값을 측정합니다. 테스트 셋의 코스트 함수값이 작을수록 학습 알고리즘이 좀 더 일반화된 알고리즘이라는 것을 알 수 있습니다.
로지스틱회귀 모델도 위에서 본 선형회귀 모델에서와 같이 학습 셋과 테스트 셋을 나누고 학습 셋으로 학습한 후 테스트 셋으로 코스트 함수값을 측정합니다. 이것 역시 테스트 셋의 코스트 함수값이 작을수록 일반화된 알고리즘이라는 것을 확인할 수 있습니다.
* Model Selection and Train/Validation/Test Sets
이전에는 오버피팅을 피하기 위해서 데이터 셋을 학습 셋과 테스트 셋 두 분류로 나누는 시도를 했었습니다. 이번에는 데이터를 학습 셋, 교차검증 셋, 테스트 셋 세 분류로 나누고 그것이 왜 효율적인지 알아보겠습니다.
학습 셋 : 교차검증 셋: 테스트 셋은 60:20:20 비율로 나누는 것이 적절하다고 합니다.
데이터 셋을 세 가지 단계로 나눴을 때의 단계는 다음과 같습니다.
- 1. 각 다항식의 차수에 대해서 학습 셋을 사용하고 theta 를 최적화한다.
- 2. 교차검증 셋을 사용해서 오차가 가장 적은 차수 d를 구한다.
- 3. 정해진 차수 d의 theta 를 사용해서 테스트 셋의 코스트 함수를 구한다.
다항식 d의 차수는 테스트 셋을 사용하여 학습되지 않았기 때문에 테스트 셋을 외부로부터 새로 얻은 데이터들이라고 가정하고 오류치를 추정할 수 있습니다.