[ML/DL] K-Fold 교차 검증

하나·2022년 4월 3일
0

ML/DL

목록 보기
4/9
post-thumbnail

validation data set 을 k 번 바꿔가며 검증하는 K-Fold 교차 검증에 대해 공부해보고 sklearn 을 이용해서 간단한 분류 모델을 작성해봤다.

  • 사용한 데이터 : iris data set
  • 사용한 모델 : decisiontreeclassifier

K Fold Cross Validation 이란

가장 보편적으로 사용되는 교차검증 방법으로, K개의 데이터 Fold 를 만들어 학습과 검증 평가를 반복적으로 수행하는 것을 말한다.
-> 이렇게 하면 조금 더 최적에 가까운 모델 selection 이 가능하다.
사이킷런에는 다양한 편리한 기능들이 많이 있고 k-fold 또한 구현되어 있다.

  • 사이킷런에서 제공되는 API
  1. KFold
  2. StratifiedKFold
  3. cross_val_score
  • 주의해야할 점 : 회귀문제를 풀 때에는 KFold 를 사용해도 되지만, 분류 모델을 사용할 때에는 data imbalance 이슈가 있기 때문에 StratifiedKFold 를 사용해야 한다!

  • cross_val_score 의 argument
    - estimator : 구현하고자 하는 모델

    • X : 데이터 셋
    • y : label 데이터 셋
    • scoring : 검증 지표 (성능 평가 지표)
    • cv : Cross Validation의 Fold 숫자
    • return 값은 list 형태의 Fold 별 검증 결과이다.
  • 코드로 살펴보자

# K Fold Validation을 위한 cross_val_score() 메서드 로딩
from sklearn.model_selection import cross_val_score

# 모델 구현을 위한 라이브러리 로딩
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import numpy as np

# load_iris() 메서드를 이용하여 iris 데이터 셋 로드
iris = load_iris()
data = iris.data
label = iris.target

# DecisionTreeClassifier 모델 객체 생성
dt_clf = DecisionTreeClassifier(random_state=156)

# cross_val_score() 메서드를 이용하여 교차 검증 수행
scores = cross_val_score(estimator=dt_clf,
                         X=data, y=label,
                         scoring='accuracy',
                         cv=3)

# 교차 검증 수행 결과 성능 지표 출력
print('Fold val accuracy:',np.round(scores, 4))
print('Avg val accuracy:', np.round(np.mean(scores), 4))

0개의 댓글