Skip to content

k-겹 교차 검증 #
Find similar titles

Structured data

Category
Algorithm

Introduction #

기계 학습, 심층 학습에서 학습한 모델의 성능을 평가하는 것은 단연 가장 중요한 일이래도 과언이 아니다. 모델을 학습하고 평가할 때는 학습용, 평가용 데이터가 있어야 한다. 이 데이터를 어떻게 나누느냐에 따라서 성능을 평가한 결과가 터무니없이 높거나, 낮을 수 있다. 따라서 인공지능 분야에서 학습용/ 평가용 데이터를 잘 나누는 것이 중요하다.

k-fold cross validation(k-겹 교차검증)이란? #

k-fold 교차 검증은 위처럼 학습용/ 평가용 데이터 세트를 나누는 방법론 중의 하나이다. 먼저 교차 검증(cross-validation)에 대해 알아보자. 교차 검증이란 쉽게 말해 데이터를 여러 번 반복해서 나누고 여러 모델을 학습하여 성능을 평가하는 방법이다. 이렇게 하는 이유는 데이터를 학습용/평가용 데이터 세트로 여러 번 나눈 것의 평균적인 성능을 계산하면, 한 번 나누어서 학습하는 것에 비해 일반화된 성능을 얻을 수 있기 때문이다. 이 때문에 교차 검증은 기존 대비 안정적이고 뛰어난 통계적 평가 방법으로 평가받는다. 그렇다면 k-fold cross-validation은 무엇인가?

k-fold cross-validation(k-겹 교차 검증)은 가장 널리 사용되는 교차 검증 방법의 하나로, 데이터를 k개로 분할한 뒤, k-1개를 학습용 데이터 세트로, 1개를 평가용 데이터 세트로 사용하는데, 이 방법을 k번 반복하여 k개의 성능 지표를 얻어내는 방법이다. 그림으로 나타내면 아래와 같다.

Image

k-fold cross-validation 방법 (출처: http://ethen8181.github.io/machine-learning/model_selection/model_selection.html)

k는 위 그림과 같이 일반적으로 5 또는 10을 사용하지만, 다른 값을 사용할 수도 있다. k=5인 경우를 예로 들어 분할 방법을 알아보자. 먼저 k=5로 설정하는 경우, 데이터를 폴드(fold)라고 하는 거의 비슷한 크기의 부분 집합 다섯 개로 나눈다. 그다음 일련의 모델들을 만든다. 첫 번째 모델은 첫 번째 폴드를 평가용 데이터셋으로 사용하고, 두 번째부터 다섯 번째까지의 폴드(4개의 폴드)를 학습용 데이터셋으로 사용한다. 그다음 모델을 두 번째 폴드를 평가용, 1, 3, 4, 5 폴드를 학습용 데이터셋으로 사용한다. 이후도 마찬가지로 수행하여 총 5개의 정확도 값을 얻게 된다.

Python 구현 방법 #

k-fold cross-validation을 python을 통해 구현하는 방법을 알아보자. 데이터는 iris 데이터를, 라이브러리로는 scikit-learn을 활용한다. 다양한 방법을 통해 cross-validation을 수행할 수 있지만, 여기서는 sklearn.model_selection.cross_val_score를 활용한다.

sklearn.model_selection.cross_val_score의 주요 파라미터는 다음과 같다. python sklearn.model_selection.cross_val_score( estimator, # 학습/평가할 모델 X, # 입력 데이터 또는 입출력을 포함하는 데이터 y=None, # 타겟 데이터 cv=None, # k를 의미, cv=5는 5-foldCV, cv=10은 10-foldCV

예제는 다음과 같다. ```python In 1: from sklearn.model_selection import cross_val_score from sklearn.datasets import load_iris from skelarn.linear_model import LogisticRegression

# iris 데이터 불러오기
iris= load_iris()

# 로지스틱 회귀 인스턴스 생성
logreg = LogisticRegression()

# k=5로 k-fold cross validation 수행
scores = cross_val_score(logreg, iris.data, iris.target, cv=5)
print("교차 검증 점수: ", scores)

Out 1: # k=5 이므로, 5개의 모델 평가 결과를 출력 교차 검증 점수: [1. 0.967 0.933 0.9 1. ] ```

마무리 #

k-겹 교차 검증은 데이터를 여러 개로 나누어 검증하는 방법으로, 하이퍼파라미터나 모델의 최적화 시, 최적의 조건을 찾는 데에 활용할 수 있다. 또 모든 데이터를 평가와 학습에 사용할 수 있어 알고리즘의 일반화 정도를 평가할 수 있다. 하지만 데이터 세트를 k번 나누어 학습하는 만큼, 일반적인 분할 방법에 비해 학습과 평가에 소요되는 연산 비용이 늘어난다는 단점이 있다.

Reference #

0.0.1_20210630_7_v33