Allen's 데이터 맛집

교차검증(Cross Validation)이란? 본문

Machine Learning/머신러닝

교차검증(Cross Validation)이란?

Allen93 2023. 8. 25. 13:07

교차 검증은 모델의 성능을 더 정확하게 평가하기 위해 데이터를 여러 개의 폴드(fold)로 나누어 각각을 테스트 세트로 사용하고 나머지를 훈련 세트로 사용하는 방법입니다. 이를 통해 모델의 성능을 더 일반화된 방식으로 평가할 수 있습니다.

 

데이터가 충분하지 않을 경우 이전 포스팅의 Hold-out으로 나누면 많은 양의 분산 발생합니다.

이에 대한 해결책으로 교차검증을 사용할 수 있으나 클래스 불균형 데이터에는 적합하지 않습니다.

https://allensdatablog.tistory.com/entry/%ED%99%80%EB%93%9C-%EC%95%84%EC%9B%83Hold-out%EC%9D%B4%EB%9E%80


 

홀드 아웃(Hold out)이란?

홀드아웃 이란? 홀드아웃 기법은 기계 학습 모델을 평가하기 위해 데이터를 훈련 데이터와 테스트 데이터로 나누는 방법 중 하나입니다. 이 방법을 사용하여 모델이 처음 보는 데이터에 대해 얼

allensdatablog.tistory.com

 

 

교차검증. 출처 : https://chrisjmccormick.wordpress.com/2013/07/31/k-fold-cross-validation-with-matlab-code/

K 교차 검증은 데이터를 k개의 폴드로 나누고 각 폴드를 한 번씩 테스트 세트로 사용하여 총 k번 모델을 학습하고 평가하는 방법입니다.

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

# 예시 데이터 생성 (X는 특성, y는 타겟)
X = [[1], [2], [3], [4], [5], [6]]
y = [0, 0, 0, 1, 1, 1]

# 로지스틱 회귀 모델 초기화
model = LogisticRegression()

# k-겹 교차 검증 수행 (k=5)
num_folds = 5
scores = cross_val_score(model, X, y, cv=num_folds)

# 각 폴드에서의 정확도 출력
for fold_idx, score in enumerate(scores):
    print(f"Fold {fold_idx+1} Accuracy: {score}")

# 평균 정확도 계산
average_accuracy = sum(scores) / num_folds
print(f"Average Accuracy: {average_accuracy}")

 

위의 예시 코드에서는 데이터를 5개의 폴드로 나누어 k-겹 교차 검증을 수행합니다. 각 폴드에서 모델을 학습하고 나머지 폴드에서 평가하여 정확도를 계산하고 출력합니다. 마지막으로 모든 폴드의 정확도의 평균을 계산하여 모델의 최종 성능을 평가합니다.

교차 검증은 데이터를 더 효과적으로 활용하여 모델의 성능을 평가하는 데 도움을 줍니다. 데이터가 적을 때 특히 유용하며, 모델의 일반화 능력을 더 신뢰할 수 있도록 도와줍니다.