본문 바로가기
스터디/혼공학습단 10기 - 자바 & 머신러닝

[혼공학습단] 혼공머신 4주차 - 교차 검증, k-fold

by 찌노오 2023. 7. 24.

 

 

 

 

기본미션

주차 진도 기본 미션
4주차  Chatper 05 교차 검증을 그림으로 설명하기

 

 

검증세트

 만약에  훈련세트만 가지고 모델링을 하면 훈련 세트에 대한 성능은 매우 좋아지지만, 테스트 세트에 대한 성능은 보장하기 어렵다. 이것을 과대적합(overfitting)이라고 하며, 앞선 챕터에서 반복적으로 알려 주고 있는 개념이다.

 

그럼 테스트세트를 훈련하는 건 어떨까? 그 역시도 마찬가지다. 현실 세계의 데이터세트에서 성능이 좋지 않을 수 있기 때문이다. 따라서 테스트세트는 말 그대로 테스트용도로만 쓰는 것이 좋다. 

 

이런 문제를 해결하기 위해 훈련세트(train set) 안에서 다시 검증세트(validation set)를 만들어서 사용한다.

앞서 훈련세트에서 테스트세트를 분리하기 위한 scikit learn의 train_test_split 매서드를 사용하여 검증세트를 만들 수 있다. 

 

훈련세트에서 테스트셋을 분리하고 여기에 다시 검증세트를 분리해준다.

 

교차 검증

데이터가 많을수록 훈련에 사용할 수 있는 좋은 모델이 만들어지는데,

그렇다고 검증세트를 너무 적게 분리하면 또 검증세트를 두는 의미가 희석된다.

 

그럴 때 사용하는 방법이 교차 검증(cross validation)이다. 교차 검증은 검증세트를 떼어 내어 평가하는 과정을 여러번 반복한다. 이를 통해 모든 데이터세트를 활용하여 훈련하는 동시에, 모든 데이터세트를 평가에 활용할 수 있다. 평가 데이터의 편향도 막을 수 있고 데이터 부족으로 인한 과소적합(underfitting) 문제도 해결할 수 있다.

 그러나 동시에 계산비용이 증가한다는 단점도 가지고 있다.

 

대표적인 교차 검증 기법으로 k-폴드 교차 검증이 있다.

그림으로 나타내면 다음과 같다.

원리는 다음과 같다.

 

1. 훈련세트를 k개의 세트로 분할한다.

2. k-1개의 데이터를 훈련 데이터로 학습한다.

3. 교차 반복을 통해 나온 성능값을 평균을 산출한다.

 

 

책에 있는 코드대로 실습해보면 다음과 같다.

 

 

References

https://huidea.tistory.com/30

https://3months.tistory.com/118

 

https://velog.io/@jhlee508/AICrossValidation

https://scikit-learn.org/stable/modules/cross_validation.html

 

 

** 사실과 다른 내용이 있을 수 있습니다. 언제든지 피드백 부탁드립니다!

 

반응형

댓글