더북(TheBook)

데이터셋을 다섯 개로 나눈 후 그중 네 개를 학습셋으로, 나머지 하나를 테스트셋으로 만들어 다섯 번의 학습을 순차적으로 실시하는 것이 5겹 교차 검증입니다. 이제 초음파 광물 예측 예제를 통해 5겹 교차 검증을 실시해 보겠습니다.

데이터를 원하는 수만큼 나누어 각각 학습셋과 테스트셋으로 사용되게 하는 함수는 사이킷런 라이브러리의 KFold() 함수입니다. 실습 코드에서 KFold()를 활용하는 부분만 뽑아 보면 다음과 같습니다.

from sklearn.model_selection import KFold
k = 5  -----➊
kfold = KFold(n_splits=k, shuffle=True)  -----➋
acc_score = []  -----➌

for train_index, test_index in kfold.split(X):  -----➍
    X_train, X_test = X.iloc[train_index,:], X.iloc[test_index,:]  
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]

먼저 몇 개의 파일로 나눌 것인지 정해 k 변수에 넣습니다. 사이킷런의 KFold() 함수를 불러옵니다. 샘플이 어느 한쪽에 치우치지 않도록 shuffle 옵션을 True로 설정해 줍니다. 정확도가 채워질 acc_score라는 이름의 빈 리스트를 준비합니다. split()에 의해 k개의 학습셋, 테스트셋으로 분리되며 for 문에 의해 k번 반복합니다.

반복되는 각 학습마다 정확도를 구해 다음과 같이 acc_score 리스트를 채웁니다.

accuracy = model.evaluate(X_test, y_test)[1] # 정확도를 구합니다.
acc_score.append(accuracy)                   # acc_score 리스트에 저장합니다.

k번의 학습이 끝나면 각 정확도들을 취합해 모델 성능을 평가합니다.

모든 코드를 모아 실행하면 다음과 같습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.