또자의 코딩교실

[스마트인재개발원]머신러닝 - 교차검증 본문

코딩공부/머신러닝 & 딥러닝

[스마트인재개발원]머신러닝 - 교차검증

또자자 2021. 12. 8. 23:48

blog thumbnail

이번시간에는 과대적합을 막기위해 고안된 방법인 교차검증에 대해 알아보자.

 

Cross Validation(CV)이란?
학습-평가 데이터 나누기를 여러 번 반복하여 일반화 에러를 평가하는 방법이다.

 

K-fold cross-validation이란

Train data를 k번만큼 쪼개고 쪼개 얘네를 suffle 시켜서

여러개의 train data에서 임의로 짜집기한 가짜 test data로 정확도를 계산하는 과정을 k번 반복한 뒤,

최후의 test data로 최종 예측점수를 가져오는 방법으로 train data를 굉장히 낯설게 만드는 방법이다.

 

K-fold cross-validation의 동작방법에 대해 알아보자.

  1. 데이터 셋을 k개로 나눈다.
  2. 첫 번째 세트를 제외하고 나머지에 대해 모델을 학습한다. 그리고 첫 번째 세트를 이용해서 평가를 수행한다.
  3. 2번 과정을 마지막 세트까지 반복한다.
  4. 각 세트에 대해 구했던 평가 결과의 평균을 구한다.

교차검증의 장단점
- 장점
안정적이고 정확하다. (샘플링 차이를 최소화해 데이터의 여러 부분을 학습하고 평가해서 일반화 성능을 측정하기 때문이다.)
모델이 훈련 데이터에 대해 얼마나 민감한지 파악가능하다. (점수 대역 폭이 넓으면 민감)
데이터 세트 크기가 충분하지 않은 경우에도 유용하게 사용 가능하다.
- 단점
여러 번 학습하고 평가하는 과정을 거치기 때문에 계산량이 많아진다

교차검증은 cross_val_score함수로 진행된다. 실습코드는 다음과 같다.

from sklearn.model_selection import StratifiedKFold
kf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
# 5개로 자를거고, 섞을거고, 0번째 난수설정타입으로요!

from sklearn.model_selection import cross_val_score
import numpy as np


#train / test 로 나누기전 데이터(전체데이터)를 이용한 교차검증
#score = cross_val_score(tree_model2, X_train, y_train, cv=5)

score = cross_val_score(tree_model2, X_one_hot, y, cv=kf)
score
#cv = n (n= n등분으로 쪼개서 교차검증할거에요)
#cv = kf (kf에 지정된 것 처럼 쪼개서 교차검증할거에요)

#교차실습 결과 평균 score
#score.mean()
np.mean(score)
Comments