교차 검증이란?
교차 검증
은 데이터셋을 여러 부분(폴드)으로 나누고 다양한 조합으로 학습/평가를 수행하여 모델 성능을 추정하는 기법입니다.
예를 들어, k-폴드 교차 검증
은 다음과 같이 진행합니다.
- 데이터를 k개의 폴드로 나눕니다.
- 각 폴드에 대해:
- k-1개의 폴드로 모델을 학습합니다.
- 남은 1개의 폴드로 모델을 평가합니다.
- 각 반복의 결과를 평균 내어 더 신뢰할 수 있는 성능 추정치를 얻습니다.
흔한 교차 검증 종류
K-폴드 교차 검증
: 가장 일반적이며 데이터를 k개의 동일한 크기의 폴드로 나눕니다.층화 K-폴드
: 각 폴드에서 클래스 비율을 유지합니다(분류 문제에서 중요).LOO(Leave-One-Out)
: 각 관측치를 하나씩 테스트로 사용합니다.ShuffleSplit
: 복원 추출로 임의 분할을 수행합니다.
교차 검증으로 모델 비교하기
다음 예시는 교차 검증으로 두 모델을 비교하고 평균 정확도가 가장 높은 모델을 선택하는 방법을 보여줍니다.
교차 검증 예제
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
# 데이터 불러오기
iris = load_iris()
X, y = iris.data, iris.target
# 모델 정의
log_reg = LogisticRegression(max_iter=200)
knn = KNeighborsClassifier(n_neighbors=5)
# 교차 검증
log_scores = cross_val_score(log_reg, X, y, cv=5)
knn_scores = cross_val_score(knn, X, y, cv=5)
print(f"로지스틱 회귀 평균 정확도: {log_scores.mean():.3f}")
print(f"KNN 평균 정확도: {knn_scores.mean():.3f}")
이 예제는
5-폴드 교차 검증
을 사용해 두 모델을 비교하고, 평균 정확도가 더 높은 모델을 선택합니다.
핵심 정리
- 모델 선택은 정확도와 효율성 모두에서 가장 적합한 모델을 고르는 과정입니다.
- 교차 검증은 실제 환경에서의 성능을 더 견고하게 추정합니다.
- 공정한 비교를 위해 모델을 비교할 때는 항상 동일한 교차 검증 전략을 사용할 수 있습니다.
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!