과적합이란?
과적합은 모델이 훈련 데이터에 너무 가깝게 맞춰져 새 데이터에 어떻게 대응해야 할지 모를 때 발생하는 머신러닝 행동입니다. 과적합은 다음과 같은 이유로 발생할 수 있습니다.
- 머신러닝 모델이 너무 복잡해서, 좀처럼 일반화되지 않는 훈련 데이터의 매우 미세한 패턴까지 기억합니다.
- 훈련 데이터의 크기가 모델 복잡도에 견주어 너무 작거나, 관련성 없는 정보가 많이 포함되어 있습니다.
모델 복잡도를 관리하고 훈련 데이터셋을 개선함으로써 과적합을 방지할 수 있습니다.
과적합 및 과소적합
과소적합은 과적합의 반대 개념인데, 모델이 훈련 데이터와 잘 맞지 않거나 새 데이터로 일반화되지 않는 경우입니다. 과적합과 과소적합은 분류 모델과 회귀 모델에 모두 나타날 수 있습니다. 다음 그림에서는 과적합 모델의 경우 분류 결정 경계 및 회귀선이 훈련 데이터를 지나치게 근접해 따라가고 과소적합 모델의 경우 꽤 멀게 따라가는 것을 볼 수 있습니다.
훈련 데이터에 대한 머신러닝 모델의 계산된 오차만 보면 과소적합보다 과적합 검출이 더 어렵습니다. 따라서 과적합을 방지하려면 머신러닝 모델을 테스트 데이터에 사용하기 전에 검증하는 것이 중요합니다.
오차 |
과적합 |
적합 |
과소적합 |
훈련 |
낮음 |
낮음 |
높음 |
테스트 |
높음 |
낮음 |
높음 |
MATLAB®을 Statistics and Machine Learning Toolbox™ 및 Deep Learning Toolbox™와 함께 사용하면 머신러닝 및 딥러닝 모델의 과적합을 방지할 수 있습니다. MATLAB은 모델의 과적합을 방지하도록 특별히 설계된 함수와 방법을 제공합니다. 모델을 훈련 또는 조정할 때 이러한 툴을 사용하여 과적합이 생기지 않도록 할 수 있습니다.
모델 복잡도를 줄여 과적합을 방지하는 방법
MATLAB을 사용하면 머신러닝 모델 및 딥러닝 모델(예: CNN)을 처음부터 새로 훈련시키거나 사전 훈련된 딥러닝 모델을 활용할 수 있습니다. 과적합 방지를 위해서는 여러분의 데이터에 적합한 복잡도 수준을 갖는 모델을 선택할 수 있도록 모델 검증을 수행하거나 정규화를 사용하여 모델의 복잡도를 낮출 수 있습니다.
모델 검증
훈련 데이터에 대해 계산된 과적합 모델의 오차는 낮습니다. 새 데이터를 들여오기 전에 별도의 데이터셋(예: 검증 데이터셋)으로 모델을 검증하는 것이 좋습니다. MATLAB 머신러닝 모델의 경우 cvpartition
함수를 사용하여 데이터셋을 훈련 및 검증 세트로 임의 분할할 수 있습니다. 딥러닝 모델의 경우에는 훈련 중에 검증 정확도를 모니터링할 수 있습니다. 모델 선택과 하이퍼파라미터 조정을 통해 모델에 대해 적절히 검증된 정확도 측정치를 개선하면 모델에 새 데이터에 대한 모델의 정확도 역시 개선될 것입니다.
정규화
정규화는 머신러닝 모델의 통계적 과적합을 방지하는 데 쓰이는 기법입니다. 일반적으로 정규화 알고리즘은 복잡도나 거칠기에 벌점을 적용하는 방식으로 작동합니다. 정규화 알고리즘은 모델에 추가 정보를 도입함으로써 모델을 보다 간결하고 정확하게 만들어서 다중공선성 및 중복된 예측 변수 문제를 처리할 수 있습니다.
예제 및 방법
훈련 데이터셋을 개선하여 과적합을 방지하는 방법
교차 검증과 정규화는 모델 복잡도를 관리하여 과적합을 방지합니다. 또 다른 방법은 데이터셋을 개선하는 것입니다. 특히 딥러닝 모델은 과적합 방지를 위해 대량의 데이터가 필요합니다.
데이터 증대
데이터 생성
합성 데이터 생성은 데이터셋을 확장하는 또 다른 방법입니다. MATLAB을 사용하면 GAN(생성적 적대 신경망) 또는 디지털 트윈(시뮬레이션을 통한 데이터 생성)으로 합성 데이터를 생성할 수 있습니다.
데이터 정리
데이터 잡음은 과적합을 야기합니다. 원치 않는 데이터 점을 줄이는 일반적인 접근법 한 가지는 rmoutliers
함수를 사용하여 데이터에서 이상값을 제거하는 것입니다.