이전 포스팅에서 머신러닝 모델을 객관적으로 평가하기 위해 모델 학습 과정에서 데이터의 분리 필요성에 대해 설파했다.
일반적인 데이터 분리에 대해서는 아래의 링크로 이동해 확인할 수 있다.
사이킷런의 <train_test_split> 함수를 이용해 데이터 분리하기
이번 포스팅에서는 모델 평가에 좀 더 객관성을 부여하기 위한 데이터 처리 방법인
'교차 검증 (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(estimator, X, 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는 각 검증의 '평가 점수'만을 보여주는 함수이며,
간단히 평가 점수만을 확인하고 싶다면 이 함수를 이용할 수 있다.
'파이썬도르 > 머신러닝' 카테고리의 다른 글
훈련셋과 평가셋 분리 <sklearn.model_selection.train_test_split> (0) | 2021.04.19 |
---|