티스토리 뷰



[Evaluating a Learning Algorithm]

1. Deciding What to Try Next

 - Week6까지 왔다면, 스스로를 머신러닝 전문가라고 불러도 무방하다. 이어지는 강의는 이후 어떻게 나아가야할 지 제시함

 - 모델 트레이닝하는데, 무작정 데이터를 모으기만하는 것은 그렇게 큰 도움이 되지 않는다. 그것을 보일 것임


 - 만약, hypothesis를 세우고 나서, 테스트를 했는데 예측 성능에 큰 에러를 보였다. 그래서 디버깅을 해야되는데 어떻게 할까?

   - training example들을 더 모은다.

   - feature 셋을 좀 줄여서 overfitting을 막는다.

   - 의미가 있는 feature들을 추가한다.(기존의 feature들이 not informative 하다는 전제)

   - polynomial feature들을 더 한다(x^2, y^2, x, y 등)

   - λ 값을 줄이거나, 늘린다(regularization parameter)


사람들은 보통 이러한 판단을 직감(gut feeling)에 의해서 결정한다.

하지만 그렇게 아무렇게나 집게 되면, 잘못 판단했을 경우 엄청난 낭비가 될 수 있다.

이러한 리스트들을 잘 배제(rule out)시켜줄 수 있는 simple technique이 있다.  => Machine learning diagnostic


일단 머신러닝 알고리즘을 평가하는 방법을 배울 것이고 그 후에 방금 언급한 진단법을 배울 것인데

진단하는 방법이 물론 구현하기도 까다롭고 이해하는데 많은 시간을 투자하게 할 수 있다. 하지만, 실제 프로젝트에 들어갈 때 많은 시간과 자원을 아낄 수 있다.


2. Evaluating a Hypothesis

 - 만약 overfitting되는 상황에 있다면, 왜 일어나는지 알아보기 위해서, parameter들을 하나씩 조정하면서 그래프를 그려보는 것도 가능하다.

하지만, 만약 parameter수가 굉장히 많아진다면 하나씩 다 해보는 건 비효율적이다.

 * 기본적으로 overfitting 상황이라면 training data에 대해서 overfitting된 것이므로, training data에 대한 error rate은 낮지만, test data에 대한 error rate은 높게 나타나는 것이 논리적으로 맞다.

 - 따라서 취하는 방법은, 다음과 같다. 일단, Dataset을 training set : test set (전형적으로 7:3)으로 나눈다. 데이터는 어차피 randomly sorted되있기 때문에(안되어 있다면 직접 랜덤하게) 처음부터 70%는 train, 나머지 30은 test로 할당하면 된다.

 - 하는 방법은 일단, training data을 통해서 parameter θ값을 update한다음, test set에 대한 error를 측정한다. linear regression의 경우는 square function(l2 distance) logistic regression의 경우 우리가 배운 방법으로 J_test(θ)를 정의해서 하면된다.

 - misclassification error(0/1 misclassification error)라는 것이 logistic regression에서 발생할 수 있다.


3. Model Selection and Train/Validation/Test Sets

 - h(x) 식이 polynomial 하게 구성될 것인지, regularization parameter를 줄이고 늘리는 지에 대한 것들을 Model Selection Problem이라고 한다.

 - 에러를 잴 때, 학습시킨 데이터를 가지고 테스트를 하는 것은 실제 에러가 발생될 수 있는 상황이라 보기 어렵기 때문에 좋은 평가방법이 아니다.

 - 그렇다면, 적절한 h(x) polynomial model을 찾기 위해 linear, quadratic, cubic.. 10차까지를 가지고, 학습을 시켜서 그 중 에러가 가장 작은 θ를 뽑았다고 하자.

 - 하지만 이 오차는 학습시킨 데이터를 대상으로 테스트를 한 것이기 때문에 실제 오차가 될지 모른다. 이 때 적용하는 방법은 전체 셋을 6:2:2 로 나누는 방법이다. 즉, 기본 나누기가 7:3이었던것을 중간에 cross-validation set(validation set이라고도 함)을 추가해서 2번 검증하는 것이다.

 => 절차는 60% 트레이닝 셋으로 원래 하던 셋을 최소화하는 최적의 값을 구하고, 20%의 cv set을 통해 오류를 최소화하는 식을 검출한다음 마지막으로 test set을 통해서 오차를 계산하는 방법이다.



댓글