본문 바로가기

머신러닝, 딥러닝

교차검증(Cross Validation)

from sklearn.cross_validation import train_test_split
Xtrain, Xtest, ytrain, ytest = train_test_split(X_df, y_df, random_state=1)

 

머신 러닝에서 데이터를 모델 학습용과, 테스트용으로 나누는 이유는 모델의 예측도를 높이기 위해서이다.

모델의 정확도 평가에 테스트 데이터를 사용하면, 모델이 테스트 데이터에도 "적합"하게 된다.

따라서, 모델이 새로운 데이터에 대해 어떻게 수행하는지 평가할 수 있는 기회를 잃게 된다. 이를 "data leakage"라고 한다.

이를 막기 위해 전체 데이터셋을 학습용 데이터(Train set), 검증용 데이터(CV set), 테스트 데이터(Test set) 세 가지 하위 집합으로 나눈다. 

일반적으로 비율은 60:20:20으로 나눈다.

검증 데이터 집합(Cross Validation Set)은 모델 개발의 마지막에 모델의 최종 평가를 위해 사용한다.

훈련된 데이터와 다른 데이터를 사용해 모델을 평가함으로써, 좋은 성능을 가지는 모델을 만들 수 있다.

데이터를 겹쳐지지 않게, 무작위로 k개의 집단으로 나눈 후,

k개의 집단에 대해 테스트를 한 후 나온 k개의 결과에 대해 결과를 종합한다.  

k는 우리가 직접 지정할 수 있지만, 통상적으로 5, 10으로 많이 사용한다.

k가 적어질수록 bias는 커지고, k가 커질수록 variance가 커진다. 또한 k가 크다면 시간도 많이 걸릴 걸린다.

 

CV(Cross Validation)은 어떤 머신 러닝 모델을 사용해야 결과가 좋을지에도 사용할 수 있고,

모델에 가장 적합한 매개변수(절편, 기울기 등)를 찾을 수도 있다.