Cross Validation(교차 검증)

추차차·2022년 6월 21일
0

파이썬 머신러닝

목록 보기
4/7
post-thumbnail

교차 검증이란?

보통 머신러닝을 하면 데이터 셋을 train과 test로 나누어서 사용한다. 하지만 종종 대회(Kaggle,데이콘 등) 데잍를 사용하면 정답지가 존재하지 않아 내가 하고 있는 모델링이 제대로 되어가고 있는지 확인하기가 어렵다.

그런 경우 나는 보통 정답지가 이미 존재하는 학습용 데이터를 일정 비율로 쪼개서 사용하곤 하였다. train 데이터를 쪼개서 사용하면 대부분 과적합이 발생할 확률이 매우 높아진다. 하지만 이러한 문제를 해결해줄 수 있는 방법 중 하나가 바로 교차 검증이다. 교차 검증은 쉽게 생각해서 train set을 train set과 validation set으로 분리하여 validation set을 검증 용으로 사용하는 방법이라고 생각하면 된다.

장단점

교차 검증의 장점을 몇가지 적어보자면,

  • 모든 데이터 셋에서 사용이 가능하다.
  • 정확도 향상에 도움이 된다.
  • 과소적합을 방지할 수 있다.
  • 조금 더 일반화된 모델을 만들 수 있다.

등등이 있을 것이다.

굳이 단점을 꼽자면 반복되는 횟수가 많아지기 때문에 모델을 학습하고 평가하는 시간이 늘어난다는 것 정도가 있을 것이다.

K-Fold Cross validation

사진출처: 사진링크

위의 사진을 보면 이해가 더 쉬울 것 같다.

  1. 데이터를 K 개 부분으로 나눈다.
  2. 그리고 그 나눈 부분들 중 하나를 검증 집합으로 나머지는 학습 집합으로 분류하여 사용한다.
  3. 이 과정을 k번 반복 하고 k개의 성능 지표를 평균내어 적합성을 평가한다.

보통 회귀 모델에 사용되고 데이터가 독립적이고 동일한 분포를 가진 경우에 사용된다.
K-Fold를 코드에서 몇몇 조정을 할 수 있는데 우선 불러오는 코드는 다음과 같다.

from sklearn.model_selection import cross_validate
cross_validate(model, X_train, y_train, cv=5)
from sklearn.model_selection import cross_val_predict
y_valid_predict = cross_val_predict(model, X_train, y_train, cv=5)
from sklearn.model_selection import cross_val_score
y_valid_score = cross_val_score(model, X_train, y_train, cv=5)

우선 cv를 통해서 fold의 수를 조정할 수 있다. 또한 scoring을 통해서 내가 원하는 평가 지표를 지정할 수 있다.

  • cross_validate() 함수를 사용하게 되면 여러개의 평가지표를 사용하고 싶을 때 사용한다.
  • cross_val_predict()을 사용하면 내가 만든 모델을 통해 예측한 값들을 불러와 원하는 평가 계산 방법을 적용할 수 있도록 해준다.
  • cross_val_score()을 이용해서 평가지표로 계산된 스코어에 대한 정보들을 확인 하는 방법 또한 있다.

나무 모델들에서 하이퍼파라미터를 튜닝하면서 교차 검증을 방법도 자주 사용해봤는데, GridSearchCV()RandomizedSearchCV를 사용해봤었다. 둘의 차이점은 Grid는 여러 하이퍼파라미터 종류들에서 내가 직접 시도할 파라미터들의 집합을 정의하고 이를 시행하면서 조합을 찾아가는 느낌이고, Random은 이름에서도 유추 가능하다 시피 임의의 값만 대입해서 찾아가는 방법이라고 생각하면 된다.

profile
데이터 꿈나무 (시리즈로 들어가면 글이 정리되어있습니다!)

0개의 댓글