[python] scikit-learn을 사용한 교차 검증 기법

머신러닝 모델을 개발할 때, 모델의 성능을 평가하는 것은 매우 중요합니다. 이를 위해 교차 검증(cross-validation) 기법을 사용할 수 있습니다. scikit-learn은 파이썬을 기반으로한 머신러닝 라이브러리로, 교차 검증에 대한 다양한 메서드를 제공합니다.

교차 검증이란?

교차 검증은 데이터를 여러 개의 부분 집합으로 나누어 모델을 여러 번 학습하고 평가하는 기법입니다. 이를 통해 모델의 일반화 성능을 더욱 정확하게 평가할 수 있습니다. 일반적으로 k-fold 교차 검증을 사용하는데, 데이터를 k개의 부분 집합으로 나누고, 각 부분 집합을 순차적으로 학습 및 평가하는 방식입니다.

scikit-learn에서의 교차 검증

scikit-learn의 model_selection 모듈에서는 다양한 교차 검증 메서드를 제공합니다. 아래는 가장 일반적으로 사용되는 메서드들입니다.

K-Fold 교차 검증

from sklearn.model_selection import KFold

# 데이터를 k개의 부분 집합으로 나누기
kf = KFold(n_splits=k)

# 각 부분 집합에 대해 학습 및 평가
for train_index, test_index in kf.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

    # 모델 학습 및 예측
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)

    # 성능 평가
    accuracy = model.score(X_test, y_test)
    print("Accuracy:", accuracy)

Stratified K-Fold 교차 검증

from sklearn.model_selection import StratifiedKFold

# 데이터를 k개의 부분 집합으로 나누기
skf = StratifiedKFold(n_splits=k)

# 각 부분 집합에 대해 학습 및 평가
for train_index, test_index in skf.split(X, y):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

    # 모델 학습 및 예측
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)

    # 성능 평가
    accuracy = model.score(X_test, y_test)
    print("Accuracy:", accuracy)

Leave-One-Out 교차 검증

from sklearn.model_selection import LeaveOneOut

# 데이터의 개수만큼 부분 집합으로 나누기
loo = LeaveOneOut()

# 각 부분 집합에 대해 학습 및 평가
for train_index, test_index in loo.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

    # 모델 학습 및 예측
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)

    # 성능 평가
    accuracy = model.score(X_test, y_test)
    print("Accuracy:", accuracy)

위의 예시 코드에서 model은 사용자가 선택한 머신러닝 모델을 의미합니다. 각 부분 집합에 대해 모델을 학습시키고 예측한 후, 평가 지표인 정확도(accuracy)를 출력합니다.

교차 검증을 통해 모델의 성능을 평가하면, 단일한 훈련 데이터에만 의존하는 것보다 신뢰할 수 있는 결과를 얻을 수 있습니다.

참고 자료