1. 개요
오늘 포스팅할 글은 앞서 말씀드린 데이터의 분리(train set, test set)의 한 걸음 나아간 이론이라고 말씀드릴 수 있습니다.
오늘 배워볼 교차검증은 그저 훈련용과 테스트용으로 데이터를 분리했을 때 나타나는 과적합(overfitting)을 줄여주는 과정입니다.
교차검증 위와 같이 학습데이터셋을 학습용과 검증용으로 분리해 다양한 학습을 할 수 있도록 합니다.
2. 교차검증의 종류
⑴ K-Fold 교차검증 = cross_val_score()
K-Fold 교차검증은 가장 많이 사용되는 교차검증 중 하나로 k의 값에 따른 폴드 세트에 k번의 학습과 검증을 반복적으로 수행하는 방법입니다.
(1-1) 일반 K-Fold 교차검증: 위와 같은 경우
(1-2) Stratified K-Fold 교차검증
> 불균형한 분포도를 가진 레이블 데이터 집합을 위한 k폴드 방식
> 학습데이터와 검증데이터 세트가 가지는 레이블 분포가 유사하도록 검증데이터 추출
실제로 기업에 존재하는 데이터는 편향이 심한 경우가 많기 때문에 해당 교차검증을 많이 사용하곤 합니다.
⑵ GridSearchCV()
교차검증과 최적 하이퍼 파라미터 튜닝을 한 번에 진행할 수 있는 방법입니다.
해당 관련 내용은 다음 포스팅에서 자세하게 코드와 함께 구현하도록 하겠습니다.
3. 코드실습
kfold 교차검증을 코드로 구현한다면 꽤 긴 코드가 실행되게 됩니다.
하지만 이러한 긴 과정들은 하나의 함수로 처리할 수 있습니다.
cross_val_score()을 사용하면 ①폴드세트추출, ②학습/예측, ③평가를 모두 진행할 수 있습니다.
해당 모듈을 이용한 코드는 아래와 같이 구현됩니다.
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score, cross_validate
iris = load_iris()
data= iris.data # feature data load
label = iris.target # target data load
dt_clf = DecisionTreeClassifier(random_state=1234)
scores = cross_val_score(dt_clf, data, label, scoring='accuracy', cv=5) # cv = fold의 갯수
print(scores)
print(np.mean(scores))
output:
각각의 폴드의 정확도가 5개가 나타나게 되고 그의 평균값을 알아보는 코드를 구현해 보았습니다.
4. 결론
결론적으로 데이터셋을 분리하는 것으로 단순하게 끝나는 것이 아니라 과적합을 줄이기 위해 어떤 식으로 분리할 것인지도 모델 구축에는 중요한 사안이 될 것입니다.
이 점을 고려하여 데이터의 특성을 잘 파악한 뒤 어떤 train, test set 분리가 효과적인 방법인 지 알아보는 것도 중요한 학습이 될 거 같습니다.
오늘도 화이팅♡
'머신러닝 > 사이킷런' 카테고리의 다른 글
[python] sklearn의 GridSearchCV()를 이용한 간단한 모델 구축 (0) | 2023.02.25 |
---|---|
[python] sklearn의 train_test_split()을 이용한 간단한 모델 구축 (0) | 2023.02.21 |
댓글