파이썬도르/머신러닝

교차 검증 (Cross Validation) <sklearn.model_selection.cross_validate>

이군 2021. 4. 22. 10:10
반응형

이전 포스팅에서 머신러닝 모델을 객관적으로 평가하기 위해 모델 학습 과정에서 데이터의 분리 필요성에 대해 설파했다.

일반적인 데이터 분리에 대해서는 아래의 링크로 이동해 확인할 수 있다.

 

사이킷런의 <train_test_split> 함수를 이용해 데이터 분리하기

훈련셋과 평가셋 분리 <sklearn.model_selection.train_test_split>

서론 주어진 데이터에 대해 머신 러닝 모델을 만들고 학습시키기 위해서는 우선 데이터를 분리할 필요가 있다. 데이터를 분리하지 않고 학습과 평가에 모두 사용하는 것은, 마치 중간 고사 문제

zngsup.tistory.com

 

이번 포스팅에서는 모델 평가에 좀 더 객관성을 부여하기 위한 데이터 처리 방법인

'교차 검증 (Cross Validation)'에 대해 알아봅니다.

 

서론

단어가 주는 의미 그대로 '교차 검증'이란 분리한 데이터를 교차하여 모델을 검증하는 겁니다.

 

<train_test_split> 함수는 데이터를 1회 분리해 모델을 학습하고 검증하지만,

교차 검증은 이를 여러번 시도해 같은 데이터로 여러번 훈련하는 효과를 얻을 수 있다.

 

즉, 모델을 반복 학습 함으로써 모델의 신뢰도를 높일 수 있다는 개념이다. 아래의 이미지를 참고하면 이해가 쉽다.

전체 데이터를 5개 조각으로 (5 Folds) 5회 (5 splits) 분리하고,

각 분리에서 한 조각을 평가 데이터로, 나머지 네 조각을 훈련 데이터로 사용해, 학습을 총 5회 진행한다.

학습의 수 만큼 정확도 점수가 나올 것이고 이를 평균내어 정확도 도출에 이용한다.

 

 

 

 

본론

사이킷런의 함수 <sklearn.model_selection.cross_validate>

또는 <sklearn.model_selection.cross_val_score>를 이용해 교차 검증을 보자.


cross_val_score(estimator, X, y=None, *, groups=None, scoring=None, cv=None, n_jobs=None, verbose=0, fit_params=None, pre_dispatch='2*n_jobs', error_score=nan)

 

주요 Parameter

  • estimator : 평가하려는 모델
  • X : 훈련 데이터
  • y : 타깃 레이블
  • cv : 교차 검증 분할 수(k)

Return

  • 교차 검증 결과 정확도 점수의 배열

cross_validate(estimatorX, y=None, *, groups=None, scoring=None, cv=None, n_jobs=None, verbose=0, fit_params=None, pre_dispatch='2*n_jobs', return_train_score=False, return_estimator=False, error_score=nan)

 

주요 Parameter

  • estimator : 평가하려는 모델
  • X : 훈련 데이터
  • y : 타깃 레이블
  • cv : 교차 검증 분할 수(k)
  • return_train_score : 훈련 점수 포함 여부

Return

  • 교차 검증 결과 정확도 점수의 배열

사이킷런에서 교차 검증을 통해 스코어를 도출해보자.

 

 

 

 

cross_validate 함수는 각 검증의 결과로 '학습 시간', '평가 시간', '평가 점수' , '훈련 점수'를 보여준다.

훈련 점수는 함수의 매개 변수 <return_train_score=True>를 추가해주면 함께 확인할 수 있다.

 

cross_val_score는 각 검증의 '평가 점수'만을 보여주는 함수이며,

간단히 평가 점수만을 확인하고 싶다면 이 함수를 이용할 수 있다.

반응형