Lab-07-2-1 application and tips
<Overfitting>
학습이 반복될수록 모델이 가설에 맞춰져가면서 Accuracy가 높아지고 평가 값이 높아지게 된다.
이때 학습 모델이 쓰이지 않은 데이터로 테스트를 하게 되면 오히려 Test는 떨어지는 경향을 보인다.
따라서 Test 데이터와 평가 데이터가 모두 잘 들어맞는, 최고의 Accuracy를 보이는 것이 가장 중요하다.
High bias: 데이터가 편향된, 학습이 덜 된 underfit 상태가 있다.
High variance: 데이터에만 맞는 모델, 즉 변화량이 많은 overfit 상태가 있다.
좌: 테스트 데이터 / 가운데: 평가 데이터 / 우: 테스트 데이터
테스트와 평가 데이터 모두에 잘 적용이 되어야 하는데 주로 테스트 데이터에만 잘 적용되는 경우가 많고, 이를 overfitting 상태라고 한다.
해결방안 1. Set features
(1) 더 많은 training data 넣기. 변화량 희석시킨다
- 커피에 물 조절을 통해 연하게 만들기.
(2) feature 수 줄이기.
- 2차원 공간의 데이터를 좀 더 의미있는 1차원 공간으로 재배치하면서 차원 수를 낮추어 각각의 속성이 가지는 의미를 보다 분명히 한다. PCA라는 방법이 많이 쓰인다.
코드를 보면 라이브러리 import 후 pca 모델 선언을 3차원으로 선언하고, 데이터를 만든 후 거기에 pca를 적용한다.
# [sklearn Code]
from sklearn.decomposition import PCA
pca = decomposition.PCA(n_components=3) # 3차원으로 선언
pca.fit(X)
X = pca.transform(X)
(3) feature 수 늘리기.
모델 자체가 너무 심플하면 모델의 의미가 없어져 모델 구체화가 필요하다.
underfitting일 때 사용하는 방식.
feature 수가 적으면 에러 율이 높다가, feature 수를 늘리면 점점 에러 율이 적어지고, 또 어느 시점에
다시 에러 율이 높아지게 된다.
=> 즉 적절한 feature 수 조절을 통해 variance와 bias를 해결!
해결방안 2. Regularization (Add term to loss)
정규화 - 학습 과정에서 특정 값을 추가해서 정규화를 시킨다.
람다 값, 즉 term 값을 loss에 주면서 정규화를 시켜 해결할 수 있다.
만약 특정 구간에서 왜곡됐을 때 람다 값을 통해 정규화를 한 효과를 주고 w 자체를 학습하면서 정규화 과정을 통해 cost 값이 반복되고 loss값에 term을 주면서 overfitting을 방지하는 효과를 가질 수 있다.
텐서플로우 코드도 단순히 w값을 함수에 넣어서 구할 수 있다.
# [Tensorflow Code]
L2_loss = tf.nn.12_loss(w) # output = sum(t ** 2) / 2
해결방안 3. More Data (Data Augmentation)
데이터 증가를 통해
이미지의 경우: 색상 다양화, 뒤집기, 적정 크기로 자르기/키우기
이외에도 추후 9장에서 다룰 해결방안 4. Dropout과 5. Batch Normalization 이 있다.
출처: https://youtu.be/KFQCADEhnNk
이미지 출처: http://bit.ly/2LQMKvk