- Dataset 분리 방식 중에 하나
- 하나의 Dataset을 train(train+val), test 총 3가지로 나눔
- Dataset을 train, test set으로 분리
- train set을 train, val set으로 분리
원본 data set -> train/test 분할 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=0) # train set -> train/validation 분할 X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, stratify=y_train, random_state=0)
- 단점
- dataset이 나눠지는 것에 대한 영향 높아 결과 달라질 가능성 존재
- 특히 Dataset이 작은 경우 문제 발생
- 이상치 영향 크다
- 다양한 패턴 찾을 수 없어 데이터에 대한 예측 성능이 떨어짐
- 때문에 Dataset이 큰 경우 사용
- Hold Out과 마찬가지로 Dataset 분리 방식 중에 하나
- Data set을 설정한 k개로 나눔
- k개 중 하나를 검증세트로 나머지를 훈련세트로 하여 모델을 학습시키고 평가
- k개 모두가 한번씩 검증세트가 되도록 k번 반복학습 후 평가지표들의 평균으로 모델 성능 평가
- Dataset이 충분치 않을 때 사용
- 종류
- KFold
- 회귀에 사용
- raw dataset의 순서 유지하면서 지정한 개수로 분할
from sklearn.model_selection import KFold kfold = KFold(n_splits=3) # 객체 생성시 k값(몇개 fold로 나눌지) 지정 ex = kfold.split(X) # split(dataset) : index를 제공하는 generator를 반환
- 보통 반복문 사용해 list형태로 process 진행
- 범주형 label 아닌 경우에 사용
- StratifiedKFold
- 분류에 사용
- label이 범주형인 경우
- label이 같거나 거의 비슷한 비율로 구성되도록 구성
from sklearn.model_selection import StratifiedKFold s_fold = StratifiedKFold(n_splits=3) # 3분할 ex = s_fold.split(X, y) # generator type = 머신러닝에서 leteral type을 사용하기 위한 class
cross_val_score()
- 위처럼 Dataset을 k개로 나누고 k번 반복하면서 평가하는 작업을 처리해주는 함수
from sklearn.model_selection import cross_val_score scores = cross_val_score(estimator , # 학습할 평가모델객체 X , # feature y , # label scoring='accuracy', # 평가지표 cv=3) # 나눌 개수(K)