Myo-Kyeong Tech Blog

[AI / 데이터분석 ] 교차 검증(Cross Validation) - KFold 와 StratifiedKFold 본문

AI

[AI / 데이터분석 ] 교차 검증(Cross Validation) - KFold 와 StratifiedKFold

myo-kyeong 2023. 5. 20. 16:02
728x90
반응형

 

교차 검증 ( Cross Validation ) 이란?

교차 검증 ( Cross Validation ) 은 머신러닝 모델의 일반화 성능을 측정하는 통계적 방법입니다. 데이터를 여러 개의 부분집합 (또는 "fold")으로 나누고 각 부분집합을 차례로 테스트 데이터로 사용하고 나머지를 훈련 데이터로 사용하는 방법입니다. 

https://hleecaster.com/ml-training-validation-test-set/

 

교차 검증 ( Cross Validation ) 을 사용하는 이유

교차 검증을 사용하는 주요 목적은 모델의 과적합을 방지하고, 데이터를 최대한 효율적으로 활용하여 일반화 성능을 높이기 위해서 입니다.  교차 검증을 통해 얻은 여러 성능 지표들의 평균을 내어 모델의 성능을 추정하면,  학습 / 테스트 분할로 얻은 성능 추정보다 더 신뢰성이 높은 추정을 할 수 있습니다. 

 

K-Fold 

K-Fold 교차 검증은 데이터를 k개의 동일한 크기의 부분집합으로 나누는 방법입니다. 각 반복에서 한 부분집합은 테스트 데이터로, 나머지 부분집합은 훈련 데이터로 사용합니다. 

https://amueller.github.io/aml/04-model-evaluation/1-data-splitting-strategies.html

from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score

# KFold 객체 생성
kfold = KFold(n_splits=5, shuffle=True, random_state=42)

# 모델 객체 생성
model = ...  

# cross_val_score 함수를 이용해 K-Fold 교차 검증 수행
scores = cross_val_score(model, X, y, cv=kfold)

# 검증 점수 평균 계산
average_score = scores.mean()

 

 

Stratified K-Fold 

데이터의 클래스가 불균형일 경우, K-Fold 로 교차 검증을 사용하면 각 fold에 모든 클래스의 데이터가 고르게 분포하지 않을 수 있습니다. 이런 경우 Stratified K-Fold 교차 검증을 사용하면 유용합니다. Stratified K-Fold는 전체 데이터셋의 클래스 비율에 맞게 데이터를 나눕니다.

https://amueller.github.io/aml/04-model-evaluation/1-data-splitting-strategies.html

 

from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import cross_val_score

# StratifiedKFold 객체 생성
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)

# 모델 객체 생성
model = ...  

# cross_val_score 함수를 이용해 Stratified K-Fold 교차 검증 수행
scores = cross_val_score(model, X, y, cv=skf)

# 검증 점수의 평균 계산
average_score = scores.mean()
728x90
반응형