[파이썬][scikit-learn] scikit-learn에서 교차 검증

교차 검증은 머신 러닝 모델의 성능을 평가하는 중요한 방법 중 하나입니다. scikit-learn은 파이썬에서 머신 러닝을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. 이번 글에서는 scikit-learn을 사용하여 교차 검증을 수행하는 방법을 알아보겠습니다.

교차 검증의 개념

교차 검증은 데이터를 여러 개의 폴드(fold)로 나누어 모델을 훈련하고 검증하는 과정입니다. 일반적으로 k-겹 교차 검증(k-fold cross-validation)이 가장 많이 사용됩니다. 여기서 k는 폴드의 개수를 의미하며, 일반적으로 5 또는 10을 사용합니다.

각 폴드는 한 번씩 검증 세트로 사용되고 나머지 폴드들은 훈련 세트로 사용됩니다. 이렇게 k 번의 훈련과 검증 과정을 반복하여 모델의 성능을 측정합니다. 이렇게 나온 성능 지표들의 평균을 구하여 최종 성능을 산출합니다.

scikit-learn에서 교차 검증 수행하기

scikit-learn은 cross_val_score 함수를 제공하여 간편하게 교차 검증을 수행할 수 있습니다. 이 함수는 지정된 모델과 데이터를 사용하여 교차 검증을 수행하고, 해당 폴드에서의 성능 지표를 반환합니다.

다음은 scikit-learn을 사용하여 교차 검증을 수행하는 간단한 예제 코드입니다.

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

# 데이터 로드
X, y = load_data()

# 모델 초기화
model = LogisticRegression()

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

# 각 폴드에서의 성능 출력
for i, score in enumerate(scores):
    print(f"Fold {i+1} score: {score}")
    
# 전체 성능 평균 출력
print(f"Mean score: {scores.mean()}")

위 코드에서는 load_data 함수로 데이터를 불러온 후, LogisticRegression을 사용하여 분류 모델을 초기화합니다. 그 다음, cross_val_score 함수에 모델, 입력 데이터(X), 출력 데이터(y), 그리고 폴드 수(cv=5)를 전달하여 교차 검증을 수행합니다.

마지막으로, cross_val_score 함수는 각 폴드에서의 성능 지표를 반환하고, 이를 순회하며 각 폴드의 성능을 출력합니다. 마지막으로 전체 폴드 성능의 평균을 계산하여 출력합니다.

이를 통해 교차 검증을 통한 모델의 성능을 간단하게 확인할 수 있습니다.

마무리

scikit-learn을 사용하여 교차 검증을 수행하면 모델의 일반화 성능을 평가할 수 있습니다. 이를 통해 오버피팅이나 언더피팅 같은 문제를 파악하고 모델을 개선할 수 있습니다. scikit-learn은 다양한 모델과 성능 지표를 제공하여 유연하게 교차 검증을 수행할 수 있도록 도와줍니다.