cross-validation (교차검증)

c.haha.e·2025년 8월 13일

STUDY

목록 보기
16/27

cross-validation (교차검증)란?


1. 개념(쉬운 정의)

  • 전체 데이터를 여러 조각(폴드, fold)으로 나눠서 여러 번 반복해서 모델 성능을 평가하는 방법이야.

2. 왜 필요할까?

  • 모델의 정확하게 평가하려고!
  • 한 번만 테스트하면 우연히 쉬운/어려운 데이터가 걸릴 수 있어서 검증이 불안정할 수 있음.
  • 여러 번 데이터 섞어가며 평가하면 평균 성능이 훨씬 믿을만해짐.

3. 실전에서 가장 많이 쓰는 방식: K-Fold 교차검증

  • K-Fold(대표적으로 5-Fold, 10-Fold): ① 데이터를 K개(예: 5개)로 똑같이 나눔 ② 한 번은 4조각으로 학습, 1조각으로 평가 ③ 이걸 조각마다 테스트 조각을 바꿔가며 K번 반복 ④ K번 평가한 점수의 평균이 진짜 성능!

4. 코드 예시


from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
model = LogisticRegression(max_iter=200)
scores = cross_val_score(model, X, y, cv=5)  # 5-Fold
print(scores)        # [0.96, 0.98, 0.94, 0.96, 1.0]  (폴드별 점수)
print(scores.mean()) # 평균 성능

cross_val_score 파라미터

파라미터명의미/역할예시/설명
estimator모델(분류기/회귀기)실제로 평가할 모델 객체LogisticRegression(), SVC()
X입력 데이터(피처, 독립변수)train_X, X
y정답 데이터(타깃, 레이블, 종속변수)train_y, y
cv폴드 수(몇 조각으로 나눌지)5(5-Fold), 10
scoring성능 평가 방식(기본: accuracy)'accuracy', 'f1', 'roc_auc'

대표 예시


from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
X = [[1,2],[2,3],[3,4],[4,5]]
y = [0,0,1,1]

scores = cross_val_score(
    estimator=model,  # 사용할 모델
    X=X,              # 입력 데이터(피처)
    y=y,              # 정답 데이터(라벨)
    cv=3,             # 3-Fold 교차검증
    scoring='accuracy'# 평가 방식(정확도)
)
print(scores)

결론 요약

  • 필수:
    • 모델(estimator)
    • 입력 데이터(X)
    • 정답/라벨(y)
  • 옵션:
    • cv(폴드 수, 기본 5)
    • scoring(평가방식, 기본은 정확도)

6. 실무에서의 역할

  • 진짜 성능 일반화 성능 과적합 방지에 꼭 필요
  • 모델/파라미터/데이터 튜닝 전 성능 비교에도 표준

한줄 정리

cross-validation은 데이터를 여러 번 섞어서 훈련/평가를 반복하고, 그 평균 성능을 모델의 실력으로 삼는 방법! 실험/공모전/논문/실무에서 모델 비교, 파라미터 튜닝의 표준!

profile
기록용 블로그

0개의 댓글