[python] 교차 검증 활용 방법

이번 포스트에서는 Python을 사용하여 교차 검증을 수행하는 방법에 대해 알아보겠습니다.

교차 검증이란?

교차 검증은 모델이 훈련 데이터에 과적합되는 것을 방지하고 모델의 일반화 성능을 더 정확하게 평가하기 위한 방법입니다. 주어진 데이터를 여러 개의 부분 집합으로 나누고, 각 부분 집합을 훈련 및 테스트 데이터로 사용하여 모델을 여러 번 검증합니다. 이를 통해 모델의 성능을 보다 신뢰할 수 있게 평가할 수 있습니다.

k-겹 교차 검증 (k-fold Cross-Validation)

가장 널리 사용되는 교차 검증 기법으로, 데이터를 k개의 부분 집합으로 나누고, 각각의 부분 집합을 테스트 데이터로 사용하여 모델을 k번 검증합니다. 각각의 검증 결과를 평균하여 최종 성능을 계산합니다.

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

# 데이터셋과 모델을 준비
X, y = ...  # 데이터셋 로드
model = LogisticRegression()  # 모델 초기화

# k-겹 교차 검증 수행
kfold = KFold(n_splits=5, shuffle=True, random_state=42)  # 5-겹 교차 검증
scores = cross_val_score(model, X, y, cv=kfold)  # 교차 검증 수행
print('교차 검증 평균 정확도:', scores.mean())  # 평균 성능 출력

계층별 k-겹 교차 검증 (Stratified k-fold Cross-Validation)

클래스 간의 균형을 유지하기 위해 계층별로 데이터를 분할하여 교차 검증을 수행하는 방법입니다. 이를 통해 각 부분 집합에서 클래스 비율이 유지되며, 불균형한 데이터셋에 효과적으로 적용할 수 있습니다.

from sklearn.model_selection import StratifiedKFold

# 데이터셋과 모델을 준비
X, y = ...  # 데이터셋 로드
model = ...  # 모델 초기화

# 계층별 k-겹 교차 검증 수행
stratified_kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)  # 계층별 5-겹 교차 검증
scores = cross_val_score(model, X, y, cv=stratified_kfold)  # 교차 검증 수행
print('교차 검증 평균 정확도:', scores.mean())  # 평균 성능 출력

Leave-One-Out 교차 검증

각 반복에서 하나의 샘플을 테스트 세트로 사용하고 나머지 샘플을 훈련 세트로 사용하여 모델을 검증하는 방법입니다. 데이터셋이 작을 때 유용하며, 모든 데이터를 테스트에 활용하기 때문에 정확한 모델 평가가 가능합니다.

from sklearn.model_selection import LeaveOneOut

# 데이터셋과 모델을 준비
X, y = ...  # 데이터셋 로드
model = ...  # 모델 초기화

# Leave-One-Out 교차 검증 수행
leave_one_out = LeaveOneOut()
scores = cross_val_score(model, X, y, cv=leave_one_out)  # 교차 검증 수행
print('교차 검증 평균 정확도:', scores.mean())  # 평균 성능 출력

위에서 소개한 세 가지 방법을 통해 교차 검증을 적용하여 모델의 성능을 신뢰할 수 있게 평가할 수 있습니다.

더 많은 교차 검증 기법 및 파라미터에 대한 정보는 scikit-learn 공식 문서를 참고하시기 바랍니다.