들어가며
우리는 데이터 분포를 봤을 때 얼마나 복잡한 모델을 사용해야 할지 고민이 될 수 있다
그래서 우리는 학습 곡선이라는 것을 이용할 수 있다
학습 곡선은 훈련 데이터의 양에 따라 모델의 성능이 어떻게 달라지는지를 보여주는 그래프이다
학습 곡선을 통해 과대적합인지 과소적합인지 판단 가능하고 적절한 복잡도의 모델을 선택할 수 있을 것이다
학습 곡선(learning curve)
학습 곡선은 훈련 세트의 크기에 따라 모델의 훈련 오차와 검증 오차를 나타낸 그래프이다
사이킷런에서 제공하는 learning_curve() 함수를 이용하여 그래프를 표현할 수 있다
from sklearn.model_selection import learning_curve
train_sizes, train_scores, valid_scores = learning_curve(
LinearRegression(), X, y, train_sizes=np.linspace(0.01, 1.0, 40), cv=5,
scoring="neg_root_mean_squared_error")
선형 회귀를 사용하였고 RMSE를 사용하여 성능을 검증한 것을 볼 수 있다

우선 이 모델은 결과적으로 보면 과소적합이다
두 곡선이 꽤 높은 오차에서 수평한 구간을 만들며 근접해있기 때문이다
그래프를 세부적으로 분석해보겠다
우선 훈련 세트(빨간 곡선)를 먼저 보면 훈련 세트에 샘플이 1개 혹은 2개정도 있을경우 오차가 거의 없지만
샘플이 추가되면서 데이터가 비선형이기도 하고 잡음도 있어서
오차가 계속 커지면서 모델이 훈련 데이터를 완벽히 학습해지는 것이 어려워지는 것을 볼 수 있다
그다음 검증 세트(파란 곡선)을 보면 적은 수의 훈련 샘플로 검증할 때는 제대로 일반화가 되어있지 않아 오차가 크다
샘플이 추가되면서 학습이 되고 검증 오차가 서서히 감소하는 것을 볼 수 있다
하지만 여전히 오차는 크다고 봐야한다
추가로 두 곡선은 모델이 너무 단순해서
일정 수준에 도달하면 데이터 샘플을 추가해도 평균 오차에 효과가 없이 수평으로 가는 것을 볼 수 있다
이번에는 다항 회귀를 사용한 모델의 학습 곡선을 보겠다
from sklearn.pipeline import make_pipeline
polynomial_regression = make_pipeline(
PolynomialFeatures(degree=10, include_bias=False),
LinearRegression())
train_sizes, train_scores, valid_scores = learning_curve(
polynomial_regression, X, y, train_sizes=np.linspace(0.01, 1.0, 40), cv=5,
scoring="neg_root_mean_squared_error")
10차 다항 회귀 모델인 것을 볼 수 있다

이 곡선은 이전의 선형 회귀의 학습 곡선과 비교해보자면
우선 훈련 세트 오차와 검증세트의 오차가 이전보다 훨씬 낮아졌다
하지만 두 곡선 사이의 공간이 있으며 훈련 세트가 검증 세트보다 오차가 더 낮다
이 말은 검증 세트보다 훈련 세트에서 모델이 더 나은 성능을 보인다는 것으로
과대적합되었다는 것을 알 수 있게된다
그렇다면 적절한 학습 곡선은 무엇이며 어떤 형태를 띄는지 궁금할 수 있다
적절한 학습 곡선은 낮은 오차에서 두 곡선이 가깝게 수렴하는 것이 가장 이상적이고 적절하다고 보면된다
마치며
사실 교차검증을 활용하여 모델의 일반화 성능을 추정해 적절한 모델을 선택하는 방법도 있다
실제 현업에서는 두가지 방법 모두 사용한다
학습 곡선을 통해 모델의 상태를 파악하여 모델의 복잡도를 개선할 방향을 정하고
교차 검증을 통해 모델의 성능을 파악하고 적절한 모델을 선택한다
사실 우리가 위에서 알아보았던 사이킷런에서 제공하는 learning_curve() 함수가
기본적으로 교차검증을 사용한 것을 볼 수 있다
학습 곡선을 적절히 활용해서 올바른 복잡도를 가진 모델을 찾도록 노력해야한다
'AI > Machine Learning' 카테고리의 다른 글
| [AI] 로지스틱 회귀(logistic regression) (0) | 2026.03.17 |
|---|---|
| [AI] 릿지 회귀(ridge regression), 라쏘 회귀(lasso regression), 엘라스틱넷 회귀(elastic net regression) (1) | 2026.03.15 |
| [AI] 경사하강법(Gradient Descent) (1) | 2026.03.14 |
| [AI] 오차 행렬을 통한 오류 분석 (1) | 2026.03.02 |
| [AI] 다중 분류(multiclass classifier) (0) | 2026.03.02 |
