#!/usr/bin/env python3


cross-validation


0. 들어가기 전에

# library import

from sklearn.datasets import make_blobs

from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import train_test_split


x, y = make_blobs(random_state=0)


x_train, x_test, y_train, y_test = \

  train_test_split(x, y,

                   random_state=0, test_size=0.3)


logreg = LogisticRegression().fit(x_train, y_train)

print('test score \n{:.3f}'.format(logreg.score(x_test, y_test))) # 0.900


데이터를 훈련 세트와 테스트 세트로 나누는 이유는  새로운 데이터에 모델이 얼마나 잘 일반화되는지 측정하기 위해서

모델이 훈련 세트에 잘 맞는 것보다 학습 과정에 없던 데이터에 대해 예측을 얼마나 잘하느냐가 중요


cross-validation교차검증은 데이터를 여러 번 반복해서 나누고 여러 모델을 학습

보통 5 or 10을 사용


5-겹 교차 검증을 하려면 먼저 fold폴드라고 하는 비슷한 크기의 'subset'다섯 개로 나누고, 모델들을 만듬

첫 번째 모델은 첫 번째 fold를 테스트 세트로 사용하고 나머지 (2에서 5까지) fold를 훈련 세트로 사용하여 학습

즉 이 모델은 fold 2~5까지의 데이터를 사용해 만들어지고 fold1을 사용해 정확도를 평가함


그 다음 두 번째 모델은 fold2를 테스트 세트로 사용하고 fold1, 3 ,4, 5의 데이터를 훈련 데이터로 사용

이런 방법으로 3, 4, 5를 테스트 세트로 사용해 반복

이렇게 데이터를 훈련 세트와 테스트 세트로 나누는 다섯 번의 분할마다 정확도를 측정하여, 결국 다섯 개의 정확도 값을 얻게 됨


# library import

import mglearn

import matplotlib.pyplot as plt


mglearn.plots.plot_cross_validation()

plt.show()

5-겹 교차 검증에서의 데이터 분할


+ Recent posts