교차검증
1 개요편집
크로스 밸리데이션(Cross validation). 데이터를 훈련 데이터와 검증 데이터로 분할한 다음 학습의 타당성을 검증하는 것.
데이터가 많지 않을 때 훈련데이터와 검증데이터로 나누면 운 좋게 비슷한 성격의 데이터들이 분리되어 오류율이 줄어들기도 한다. 이런 경우엔 학습을 할 때마다 오류비율이 달라지는데, 이를 방지하고 모든 데이터를 써서 정확한 오차를 판단하기 위해 사용하는 기법이다.(데이터가 충분히 큰 경우엔 그닥 사용하지 않는 방법이다.)
2 이론편집
2.1 K 분할 교차검증편집
K-fold cross validation. 데이터를 K개로 분할해 훈련과 테스트를 반복한다. 예컨대 데이터를 3개의 집합으로 분리한다면
- 집합 1을 테스터데이터로 쓰고 집합 2,3을 훈련데이터로 사용한다.
- 집합 2를 테이스테이터로 쓰고 집합 1,3을 훈련데이터로 사용한다.
- 집합 3을 테이스테이터로 쓰고 집합 1,2를 훈련데이터로 사용한다.
각각의 과정에서의 정밀도를 구하고 이를 평균내어 최종적인 분류 정밀도를 구한다.
데이터를 남김없이 학습에 활용할 수 있다는 장점이 있다.
다음과 같은 형태로 코드를 짜면 되는데... 일반적으로 인공지능 프레임워크에 이런 기능을 간단하게 수행할 수 있도록 구현해 둔다.
K = 5 # 몇 개의 데이터로 분할할 것인지 결정.
random.shuffle(데이터) # 데이터를 섞는다.
listk = [ [] for i in range(K) ] # K개의 리스트를 만든다.
for i in range(len(데이터)): # 데이터 갯수만큼 반복
listk[i % K].append(데이터[i]) # i번째 데이터를 i/K의 나머지번째에 해당하는 리스트에 넣는다.
3 사이킷런을 이용한 방법편집
의도 | 설명 | 방법 |
---|---|---|
기본 사용법 | 모델과 데이터를 안에 넣고 돌린다. | from sklearn.model_selection import cross_val_score
score = -1 * cross_val_score(모델, X, y,
cv=5,
scoring='neg_mean_absolute_error')
|
파이프라인을 쓰는 경우 | 다음과 같이 쓸 수 있다.
모델까지 담은 파이프라인을 그대로 넣고 순서대로 기입한다. 자세한 방법은 '파이프라인' 참고. |
scores = -1 * cross_val_score(my_pipeline, X, y,
cv=3,
scoring='neg_mean_absolute_error')
|
3.1 사용하는 인자편집
인자 | 설명 |
---|---|
cv | 몇 개의 묶음으로 나눌 것인가. 5개라면 전체 데이터를 5개의 묶음으로 나눈 후 한 묶음씩 검증데이터로 떼어 5번의 검증을 진행한다. |
scoring | 어떤 방법으로 검증할 것인가. 사이킷런에서 제공하는 검증방법은 다음의 페이지에서 안내한다. 링크 |