데이터셋 나누기와 모델 검증

강민정·2023년 7월 4일
0

Machine Learning

목록 보기
2/10
post-thumbnail

데이터셋

  • train, val → training set / test → test set
  • Train 데이터셋 (훈련/학습 데이터셋)
  • Validation 데이터셋 (검증 데이터셋) → 하는 중간에 확인
  • Test 데이터셋 (평가 데이터셋) → 마지막에 모델의 성능을 측정하는 용도(한번만 사용 가능, 두 번 이상 사용하면 그건 검증 데이터셋, 학습 할 때 넣지는 않음)
    • 원하는 성능이 나올 때 까지 설정변경→ 훈련 → 검증

머신러닝 모델 파라미터

  • 하이퍼파라미터(Hyper Parameter)
    • 사람이 직접 설정해야하는 파라미터 값, 모델 생성할 떄 전달하는 요소
  • 파라미터(Parameter) → 바꿀 수 없는 값
    • 데이터 학습을 통해 찾는 파라미터 값

Hold Out - Data분리 방식 1

  • 데이터셋을 Train set, Validation set, Test set으로 나눈다.
  • sklearn.model_selection.train_test_split() 함수 사용
    • 하나의 데이터셋을 2분할 하는 함수

📌 Train/Test set 분리

X_tmp, X_test, y_tmp, y_test = train_test_split(X, # input(feature, X)
                                                y, # output(target, label, y)
                                                test_size=0.2, # test set의 크기. (0~1실수 : 비율, 정수 : 개수, 기본값 : 0.25)
                                                stratify=y, # 분류에서는 필수. 원본데이터셋의 클래스별 비율을 유지하면서 나눠지도록 처리)
                                                random_state=0 # random seed 값
                                               )

X_tmp.shape, X_test.shape, y_tmp.shape, y_test.shape

📌 Train/Validation/Test set 분리

X_train, X_val, y_train, y_val = train_test_split(X_tmp, y_tmp, test_size=0.2, 
                                                  stratify=y_tmp, random_state=0)
  • 단점 - 데이터가 충분히 많으면(다양한 패턴을 가진) 대부분 해결,

K-겹 교차검증 (K-Fold Cross Validation) - Data분리 방식 2 (Hold out 방식의 단점 해결)

  1. 데이터셋을 설정한 K 개로 나눈다.
  2. K개 중 하나를 검증세트로 나머지를 훈련세트로 하여 모델을 학습시키고 평가한다.
  3. K개 모두가 한번씩 검증세트가 되도록 K번 반복하여 모델을 학습시킨 뒤 나온 평가지표들을 평균내서 모델의 성능을 평가한다.
  • 데이터양이 충분치 않을때 사용한다.
  • 보통 Fold를 나눌때 2.5:7.5 또는 2:8 비율이 되게 하기 위해 4개 또는 5개 fold로 나눈다.
  • 이상치의 영향력이 줄어든다.
  • 종류
    • KFold - 회귀문제의 Dataset
    • StratifiedKFold - 분류문제의 Dataset

KFold

  • 회귀 문제일 때 사용(다 다른 값이기 때문에 순서대로 잘라도 상관없음)
  • 지정한 K만큼 분할 (앞에서부터 시작하며 순서 유지하면서)
  • KFold(n_splits=K) : 몇개의 Fold로 나눌지 지정
  • KFold객체.split(데이터셋) : train/test set에 포함될 데이터의 index들을 반환 → Generator 생성
    • 연속된 값을 제공(생성)하는 객체. 연속된 값을 한번에 메모리에 저장하지 않고 필요시마다 순서대로 하나씩 제공한다.
    • 함수형식으로 구현하며 return 대신 yield를 사용한다.

StratifiedKFold

  • 클래스 레이블이 불균형하게 분포된 데이터셋에서 사용
  • 이진 분류 문제에서 한 클래스의 샘플 수가 다른 클래스보다 훨씬 많을 경우, StratifiedKFold를 사용하여 각 폴드가 동일한 클래스 비율을 가지도록 데이터를 분할할 수 있음
  • 전체 데이터셋의 class별 개수 비율과 동일한 비율로 fold들이 나뉘도록 한다.
  • from sklearn.model_selection import StratifiedKFold
    • StratifiedKFold(n_splits=K) : 몇개의 Fold로 나눌지 지정
    • StratifiedKFold객체.split(X, y)
  • 매개변수를 지정 필요
    • n_splits 매개변수는 분할할 폴드의 개수를 설정
    • shuffle 매개변수는 데이터를 섞을지 여부를 지정, 기본값은 False이며, 데이터를 섞지 않고 순서대로 분할함
    • random_state 매개변수는 난수 생성기의 시드 값을 설정하는 데 사용

Cross Validation Utility 함수

cross_val_score( )

  • 데이터셋을 K개로 나누고 K번 반복하면서 평가하는 작업을 처리해 주는 함수
  • 주요 매개변수
    • estimator : 평가할 모델을 지정합니다. 주로 분류 모델 또는 회귀 모델을 사용합니다.
    • X : 입력 특성 데이터입니다.
    • y : 타겟 변수 데이터입니다.
    • scoring : 모델의 성능을 평가하기 위한 지표를 지정합니다. 예를 들어, 분류 모델의 경우 'accuracy' (정확도), 'precision' (정밀도), 'recall' (재현율) 등을 사용할 수 있습니다.
    • cv : 교차 검증 폴드 수를 지정합니다. 기본값은 5로, 5개의 폴드로 교차 검증을 수행합니다.

cross_validate()

  • 교차 검증을 수행하여 모델의 성능을 평가하는 데 사용
  • cross_val_score() 함수와 유사하지만, cross_validate() 함수는 더 다양한 평가 지표와 추가 정보를 반환함
  • 주요 매개변수
    • estimator : 평가할 모델을 지정합니다. 주로 분류 모델 또는 회귀 모델을 사용합니다.
    • X : 입력 특성 데이터입니다.
    • y : 타겟 변수 데이터입니다.
    • scoring : 모델의 성능을 평가하기 위한 지표 또는 여러 지표를 지정합니다. 단일 지표 또는 지표의 리스트를 사용할 수 있습니다.
    • cv : 교차 검증 폴드 수를 지정합니다. 기본값은 5로, 5개의 폴드로 교차 검증을 수행합니다.
    • return_train_score : True로 설정하면 각 폴드에서의 학습 점수도 반환합니다. 기본값은 False입니다.

0개의 댓글