CV를 할 거면 Train 데이터를 검증용 세트로 나눠줄 필요가 없다.
Train 데이터를 k개의 집단으로 나눠, 1개와 k-1개의 집단에 대해 교차검증을 실시하기 때문이다.
(그리고 k번에 대해 나온 스코어를 평균 낸다.)
이를 K-Fold Cross Validation이라고 하는데, random_state를 쓰지 않아도 스코어가 고정되는 장점이 있다.
K번에 대한 평균이기 때문이다.
K의 수는 자의적인데, 모든 샘플을 블록화 하여 모든 샘플을 검증하는 게 Leave One Out Cross Validation이다.
- 임의로 train / validation / test set을 나누는 것을 Hold-Out CV 방식이라고 한다.
데이터셋의 크기가 충분히 클 때 사용한다.
데이터셋의 크기가 충분히 크지 않다면, K-Fold CV 방식을 사용한다. 훈련시키는 데이터로 검증도 할 수 있기 때문이다.
교차검증은 시계열 데이터에는 적합하지 않은데, k개의 그룹을 나눌 때 시간대가 섞여
미래의 데이터를 예측하기 어렵기 때문이다.
CV는
1. 어떤 모델이 가장 좋은 성과를 내는지 비교할 때
2. 각 모델에서 파라미터를 튜닝하는 데 사용할 수 있다.
RandomizedSearchCV나, GridSearchCV에서 refit=True를 넣어주면
CV 한 파라미터 값을 다시 학습시켜 최적의 모델로 만들어준다.
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
import numpy as np
clf = RandomForestClassifier() #Initialize with whatever parameters you want to
# 10-Fold Cross validation
np.mean(cross_val_score(clf, X_train, y_train, cv=10))
이런 식으로 cross_val_score에 cv를 파라미터로 넣어서도
스코어를 낼 때 cv를 할 수 있다. 검증 세트를 따로 훈련 세트에서 떼어놓지 않아도 된다!
'머신러닝, 딥러닝' 카테고리의 다른 글
분류Classification와 회귀Regression의 차이 (0) | 2021.02.13 |
---|---|
시계열 데이터에서의 invalid type promotion error (0) | 2021.02.10 |
threshold, precision, recall의 의미 (0) | 2021.02.08 |
트리 모델에서 Ordinal 대신 Nominal 인코딩을 해야 하나? (0) | 2021.02.07 |
랜덤포레스트 모델에서 Select K Best를 사용해야 할까? (0) | 2021.02.07 |