본문 바로가기
Data Science

머신러닝 Train, Test Data 교차검증(k-fold, stratified k-fold, cross_val_score, GridSearch CV)

by 한입만쥬 2023. 7. 27.

Training and Testing data

  • train : 학습
  • validation : 학습 중간에 검증 (여러번)
  • test : 모델 평가 (단 한번만)

교차 검증 Cross Validation

  • problem : 데이터를 train, test set으로 나눠도 고정된 학습 데이터로 평가하다 보면 테스트 데이터에만 최적의 성능을 발휘하도록 편향되게 모델을 유도하는 경향이 생겨 과적합(overfitting)이 될 수 있다.
    • 이렇게 되면 결국 다른 테스트용 데이터가 들어올 경우에는 성능이 저하된다.
  • solution : 데이터 편중을 막기 위해, 교차 검증하기!
    • (본 고사(test)를 치르기 전에 모의고사(valid set)으로 검증하듯이)

K-fold Cross Validation

  • k 개의 데이터 폴드 세트를 만들어서 k번만큼 각 폴드 세트에 학습과 검증 평가를 반복 수행하는 방법
  • k=5일 때 K폴드 평가 결과는 '5번 학습/검증해서 구한 결과의 평균'

Stratified K Fold

  • 불균형한 분포도의 label(클래스) 데이터 집합을 위한 K 폴드 방식 (한 데이터 집합이 특이하게 많거나 적어서 값의 분포가 skew 되는 것)
  • 원본 데이터와 유사한 레이블 값의 분포를 학습&테스트 세트에도 유지하는 게 중요함

cross_val_score() : 교차 검증을 간편하게!

  • sklearn API 중 kfold를 더 편하게 해주는 것
  • 1 폴드 세트를 결정하고 2_ for 루프로 학습/테스트 데이터의 인덱스 추출 3 반복 학습, 예측 수행, 얘측 성능 반환
  • cross_val_score(model, iris.data, iris.target)

hyperparameter tuning : 최적의 파라미터를 찾는 것

  • 하이퍼 파라미터:머신러닝 알고리즘별로 최적의 학습을 위해 직접 입력하는 파라미터들을 통칭, 하이퍼 파라미터를 통해 머신러닝 알고리즘의 성능을 튜닝할 수 있다.이 값을 조정해 알고리즘의 예측 성능을 개선할 수 있다

GridSearchCV

  • 교차 검증과 최적 hyper-parameter tuning 한번에 할 수 있게 해주는 API
  • 최적의 파라미터를 도출할 수 있게 해주는 API (파라미터를 순차적으로 입력해서 테스트함)
  • 데이터 세트를 cross-validation을 위한 학습/테스트 세트로 자동으로 분할한 뒤에 하이퍼 파라미터 그리드에 기술된 모든 파라미터를 순차적으로 적용해 최적의 파라미터를 찾을 수 있게 해준다
  • 단점 : 순차적이기 때문에 수행 시간이 상대적으로 길 수 있다

GridSearch CV 주요 파라미터 :

  • Estimator: classifier, regressor, pipeline이 사용된다
  • Param_grid: key + 리스트 값을 가지는 딕셔너리가 주어지며 estimator 의 튜닝을 위해 파라미터명과 사용될 여러 파라미터 값을 지정함.
  • Scoring: 예측 성능을 측정할 평가 방법을 지정. 보통은 scikitlearn의 성능 평가 지표를 지정하는 문자열 (예:정확도의 경우 ' accuracy')로 지정하나 별도의 성능 평가 지표 함수도 지정할 수 있음.
  • Cv: 교차 검증을 위해 분할되는 학습/테스트 세트의 개수를 지정
  • Refit: 디폴트가 true이며 true로 생성시 가장 최적의 하이퍼 파라미터를 찾은 뒤 입력된 estimator객체를 해당 하이퍼 파라미터로 재학습