본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

Underfitting, Overfitting, 그리고 Regularization

~30 min · regularization, ridge, lasso

Level 0Scout
0 XP0/48 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

너무 단순해도 너무 복잡해도 실패해

과소적합은 모델이 학습 자료의 구조조차 충분히 잡지 못하는 상태야. 학습 오차와 검증 오차가 둘 다 높고 서로 비슷하게 나타나. 유용한 특성이나 상호작용을 추가하고, 모델 용량을 늘리거나 표현을 바꿔야 해. 과적합은 학습 자료의 우연과 잡음까지 외운 상태야. 학습 오차는 낮지만 검증 오차가 훨씬 높아지지.

학습·검증 곡선으로 구분해

모델 하나의 점수만 보고 실패 원인을 추측하지 마. 자료 양을 늘리며 학습과 검증 오차를 그리면 둘이 높은 곳에서 만나는지, 큰 간격을 유지하는지 보여. 과소적합에 규제를 더하면 더 나빠질 수 있고 과적합에 특성만 늘리면 간격이 커질 수 있어. 진단이 처방보다 먼저야.

규제는 큰 계수에 가격을 매겨

선형 모델은 학습 오차뿐 아니라 계수 크기에도 벌점을 주어 지나친 반응을 억제할 수 있어. 자료가 조금 바뀌었을 때 계수가 뒤집히는 현상을 줄이고, 서로 연관된 많은 특성 사이에서 더 안정적인 해를 고르게 하지. 규제 강도 α가 커질수록 계수는 0 쪽으로 더 줄어들지만 지나치면 실제 신호까지 눌러 과소적합이 돼.

Ridge, Lasso, Elastic Net

Ridge의 L2 벌점은 모든 계수를 부드럽게 줄이되 대개 정확히 0으로 만들진 않아. 연관된 특성들이 함께 조금씩 기여하게 하는 경향이 있어 예측 기준선으로 안정적이야. Lasso의 L1 벌점은 일부 계수를 정확히 0으로 만들어 희소한 모델과 특성 선택 효과를 줘. 다만 강하게 연관된 특성 중 하나를 임의로 고를 수 있어. Elastic Net은 두 벌점을 섞어 고차원 표 자료에서 두 성질의 균형을 잡아.

스케일을 맞추지 않으면 벌점이 불공평해

한 특성은 원 단위, 다른 특성은 비율 단위라면 같은 효과를 표현하는 계수 크기가 달라. 규제는 계수 숫자에 벌점을 주므로 수치 특성의 스케일을 먼저 맞춰야 해. 스케일러와 모델을 같은 파이프라인에 넣고 각 교차검증 폴드의 학습 부분에서만 스케일러를 맞춰 누출을 막아.

α는 교차검증으로 고르고 흔들림도 봐

RidgeCV, LassoCV, ElasticNetCV는 여러 α를 교차검증해 고를 수 있어. 로그 간격의 넓은 후보에서 시작하고, α에 따른 평균 점수와 폴드 간 표준편차를 함께 그려. 최고점 하나에 집착하기보다 비슷한 성능을 내는 안정 구간에서 더 단순한 값을 고르는 편이 좋아. 최적값이 후보 범위 끝에 붙었다면 탐색 범위를 넓혀야 하고.

선택한 모델을 독립 시험 자료에서 확인해

α와 모델 종류를 검증 자료로 모두 고른 뒤에만 얼려 둔 시험 자료를 열어. 성능뿐 아니라 0이 아닌 계수 수, 계수 부호의 안정성, 제공 시간도 비교해. 규제는 마법 같은 성능 향상 장치가 아니라 자료에 없는 확신을 줄이는 편향 선택이야.

Code

RidgeCV로 α 자동 선택·python
from sklearn.linear_model import RidgeCV
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
import numpy as np

alphas = np.logspace(-3, 3, 25)
pipe = Pipeline([("scale", StandardScaler()), ("ridge", RidgeCV(alphas=alphas))])
pipe.fit(X_train, y_train)
print("chosen alpha:", pipe.named_steps["ridge"].alpha_)
편향과 분산의 교환을 보는 검증 곡선·python
from sklearn.model_selection import validation_curve

train_scores, val_scores = validation_curve(
    Ridge(), X_train_scaled, y_train,
    param_name="alpha", param_range=alphas,
    cv=5, scoring="neg_root_mean_squared_error",
)

External links

Exercise

같은 문제에 교차검증으로 α를 고른 Ridge, Lasso, Elastic Net을 학습해. 얼린 시험 자료의 RMSE, 0이 아닌 계수 수, 폴드별 흔들림을 비교하고 어느 모델을 배포할지 근거를 적어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.