이진 분류를 넘어 여러 개의 클래스를 분류하는 다중 분류 기법을 알아보고, 모든 머신러닝 모델의 성능을 저하하는 고질적인 문제인 과적합(Overfitting)과 그 해결 방법에 대해 정리한다.
1. 다중 분류 (Multi-class Classification)
'손글씨 숫자(0~9)'처럼 결과가 3개 이상인 분류 문제는 어떻게 해결할까? 가장 대중적인 방법은 "One-vs-All" (또는 One-vs-Rest) 전략이다.
One-vs-All 전략
핵심은 **"하나 vs 나머지 전부"**의 구도로, 하나의 다중 분류 문제를 여러 개의 이진 분류 문제로 분해하는 것이다. 3개의 클래스를 분류하는 경우, 3개의 독립적인 이진 분류기를 훈련시킨다.
- Classifier 1 (Class 1 vs. All): 'Class 1'을 1로, 나머지를 0으로 두고 훈련. →
x가 'Class 1'일 확률 출력.
- Classifier 2 (Class 2 vs. All): 'Class 2'를 1로, 나머지를 0으로 두고 훈련. →
x가 'Class 2'일 확률 출력.
- Classifier 3 (Class 3 vs. All): 'Class 3'를 1로, 나머지를 0으로 두고 훈련. →
x가 'Class 3'일 확률 출력.
새로운 데이터가 들어오면, 3개의 분류기에 모두 넣어보고 가장 높은 확률값을 출력하는 클래스를 최종 예측 결과로 선택한다.
Prediction = max( P(class1|x), P(class2|x), P(class3|x) )
이 전략은 우리가 이미 배운 로지스틱 회귀를 그대로 활용하여 다중 분류 문제를 해결하는 매우 효과적인 방법이다.
2. 과적합 (Overfitting) 문제
과적합이란, 모델이 훈련 데이터에만 너무 과도하게 맞춰져서, 새로운 데이터에 대해서는 성능이 크게 떨어지는 현상을 말한다. 모델이 데이터의 일반적인 패턴을 학습한 게 아니라, 훈련 데이터의 노이즈까지 전부 암기해버린 상태다.
과소적합 (Underfitting) | 적절한 적합 (Just Right) | 과적합 (Overfitting) |
모델이 너무 단순해서 데이터의 패턴을 제대로 학습하지 못함 | 데이터의 전반적인 경향을 잘 파악함 | 모델이 너무 복잡해서 훈련 데이터의 노이즈까지 모두 학습함 |
(High Bias) | ㅤ | (High Variance) |
- 주요 원인: 1) 데이터에 비해 모델이 너무 복잡할 때, 2) 훈련 데이터가 부족할 때
3. 과적합 해결 방법
1) 더 많은 훈련 데이터 모으기
가장 근본적인 방법. 데이터가 많아질수록 모델은 노이즈보다 진짜 패턴에 집중하게 된다. 하지만 현실적으로 비용과 시간의 제약이 크다.
2) 피처(Feature)의 개수 줄이기
중요도가 낮은 피처를 직접 제거하여 모델을 단순화한다. 하지만 중요한 정보를 잃을 위험이 있다.
3) 정규화 (Regularization)
가장 널리 사용되는 효과적인 방법. 핵심 아이디어는 **"모든 피처를 사용하되, 파라미터(가중치
W)의 크기를 줄여 특정 피처가 과도한 영향을 주지 못하게 막는 것"**이다.이는 비용 함수(Cost Function)에 가중치 크기에 대한 페널티(Penalty) 항을 추가함으로써 이루어진다.
J_regularized(W, b) = [기존 비용 함수] + [정규화 항]
- L2 정규화 (Ridge): 가장 일반적인 방법. 가중치들의 제곱의 합에 페널티를 부여한다.
λ(람다)는 정규화 강도로, 이 값이 클수록 가중치를 더 강하게 억제한다.- 가중치를 0에 가깝게 만들지만, 완전히 0으로 만들지는 않는 경향이 있다.
정규화 항 = λ * Σ wⱼ²
- L1 정규화 (Lasso): 가중치들의 절대값의 합에 페널티를 부여한다.
- 덜 중요한 피처의 가중치를 완전히 0으로 만들 수 있다.
- 이는 모델을 단순화하는 동시에, 자동으로 **피처 선택(feature selection)**을 하는 효과가 있다.
정규화 항 = λ * Σ |wⱼ|