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