[python] 교차검증(Cross-validation)

머신 러닝 모델을 개발할 때, 모델의 일반화 성능을 정확히 평가하기 위해서는 데이터를 학습용과 테스트용으로 나누는 것이 중요합니다. 그러나 한 번의 데이터 분할만으로는 모델의 성능을 정확히 평가하기 어렵습니다. 이를 해결하기 위해 교차검증(Cross-validation)이라는 방법이 사용됩니다.

교차검증은 데이터를 여러 개의 부분 집합으로 나누고, 각 부분 집합을 학습과 테스트에 번갈아가며 사용하는 방법입니다. 가장 널리 사용되는 교차검증 방법은 k-fold 교차검증입니다. 이는 데이터를 k개의 부분 집합으로 나눈 뒤, 한 번에 하나의 부분 집합을 테스트 데이터로 사용하고 나머지 부분 집합을 학습 데이터로 사용하는 방식입니다.

예를 들어, 전체 데이터셋이 100개의 샘플로 이루어져 있다고 가정해봅시다. k-fold 교차검증을 수행하려면, 데이터셋을 5개의 부분 집합으로 나누고, 각 부분 집합을 돌아가며 테스트 데이터로 사용하면 됩니다. 다음과 같은 과정으로 교차검증을 수행할 수 있습니다.

from sklearn.model_selection import KFold
from sklearn.linear_model import LogisticRegression

data = ... # 전체 데이터셋
labels = ... # 데이터 레이블

k = 5

kf = KFold(n_splits=k)

for train_index, test_index in kf.split(data):
    train_data, test_data = data[train_index], data[test_index]
    train_labels, test_labels = labels[train_index], labels[test_index]
    
    model = LogisticRegression()
    model.fit(train_data, train_labels)
    
    accuracy = model.score(test_data, test_labels)
    print("Accuracy:", accuracy)

위 코드에서는 KFold 클래스를 사용하여 데이터를 k개의 부분 집합으로 분할하고, 각 부분 집합을 for 루프를 돌면서 학습과 테스트 데이터로 사용하고 있습니다. 이를 통해 각각의 모델의 성능을 평가할 수 있습니다.

교차검증을 통해 모델을 평가함으로써, 데이터의 분리에 따른 성능의 변동을 측정할 수 있습니다. 따라서 모델의 일반화 성능에 대한 올바른 평가를 수행할 수 있습니다.


참고 자료: