[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)를 출력합니다.
교차 검증을 통해 모델의 성능을 평가하면, 단일한 훈련 데이터에만 의존하는 것보다 신뢰할 수 있는 결과를 얻을 수 있습니다.
참고 자료
- scikit-learn documentation - Cross-validation
- scikit-learn documentation - K-Fold
- scikit-learn documentation - Stratified K-Fold
- scikit-learn documentation - Leave-One-Out