바뀜

둘러보기로 가기 검색하러 가기
3,379 바이트 추가됨 ,  2021년 9월 3일 (금) 23:19
새 문서: == 개요 == 크로스 밸리데이션(Cross validation). 데이터를 훈련 데이터와 검증 데이터로 분할한 다음 학습의 타당성을 검증하는 것. 데이터가...
== 개요 ==
크로스 밸리데이션(Cross validation). 데이터를 훈련 데이터와 검증 데이터로 분할한 다음 학습의 타당성을 검증하는 것.

데이터가 많지 않을 때 훈련데이터와 검증데이터로 나누면 운 좋게 비슷한 성격의 데이터들이 분리되어 오류율이 줄어들기도 한다. 이런 경우엔 학습을 할 때마다 오류비율이 달라지는데, 이를 방지하고 모든 데이터를 써서 정확한 오차를 판단하기 위해 사용하는 기법이다.(데이터가 충분히 큰 경우엔 그닥 사용하지 않는 방법이다.)

== 이론 ==

===K 분할 교차검증===
K-fold cross validation. 데이터를 K개로 분할해 훈련과 테스트를 반복한다. 예컨대 데이터를 3개의 집합으로 분리한다면
#집합 1을 테스터데이터로 쓰고 집합 2,3을 훈련데이터로 사용한다.
#집합 2를 테이스테이터로 쓰고 집합 1,3을 훈련데이터로 사용한다.
#집합 3을 테이스테이터로 쓰고 집합 1,2를 훈련데이터로 사용한다.
각각의 과정에서의 정밀도를 구하고 이를 평균내어 최종적인 분류 정밀도를 구한다.

데이터를 남김없이 학습에 활용할 수 있다는 장점이 있다.

다음과 같은 형태로 코드를 짜면 되는데... 일반적으로 인공지능 프레임워크에 이런 기능을 간단하게 수행할 수 있도록 구현해 둔다.<syntaxhighlight lang="python">
K = 5 # 몇 개의 데이터로 분할할 것인지 결정.
random.shuffle(데이터) # 데이터를 섞는다.
listk = [ [] for i in range(K) ] # K개의 리스트를 만든다.
for i in range(len(데이터)): # 데이터 갯수만큼 반복
listk[i % K].append(데이터[i]) # i번째 데이터를 i/K의 나머지번째에 해당하는 리스트에 넣는다.
</syntaxhighlight>

= 사이킷런을 이용한 방법 =
{| class="wikitable"
!의도
!설명
!방법
|-
|기본 사용법
|모델과 데이터를 안에 넣고 돌린다.
|<syntaxhighlight lang="python">
from sklearn.model_selection import cross_val_score

score = -1 * cross_val_score(모델, X, y,
cv=5,
scoring='neg_mean_absolute_error')
</syntaxhighlight>-1을 곱해주는 것은 사이킷런에서 -는 부정의 의미로 쓰이기 때문이다. 평균절대값에러이지만 음수로 표현되기 때문에 -1을 붙여준다.
|-
|파이프라인을 쓰는 경우
|다음과 같이 쓸 수 있다.
모델까지 담은 파이프라인을 그대로 넣고 순서대로 기입한다.

자세한 방법은 '[[파이프라인]]' 참고.
|<syntaxhighlight lang="python">
scores = -1 * cross_val_score(my_pipeline, X, y,
cv=3,
scoring='neg_mean_absolute_error')
</syntaxhighlight>
|}

=== 사용하는 인자 ===
{| class="wikitable"
!인자
!설명
|-
|cv
|몇 개의 묶음으로 나눌 것인가. 5개라면 전체 데이터를 5개의 묶음으로 나눈 후 한 묶음씩 검증데이터로 떼어 5번의 검증을 진행한다.
|-
|scoring
|어떤 방법으로 검증할 것인가. 사이킷런에서 제공하는 검증방법은 다음의 페이지에서 안내한다. [https://scikit-learn.org/stable/modules/model_evaluation 링크]
|}
[[분류:데이터 검증]]
[[분류:Scikit-learn]]

둘러보기 메뉴