• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

최적의 cv값에 대한 질문

21.10.04 23:38 작성 조회수 589

0

현재 약 200개의 Train Dataset을 대상으로 분류를 위한 SVM을 진행하면서 GridSearch를 통해 최적의 파라미터를 찾고 있습니다.

분석을 진행하면서 궁금해진 것이 최적의 CV값을 어떻게 정해야할지에 대한 것입니다. CV값을 높여가면서 best_score와 Test Dataset에 대한 적용 결과도 함께 좋아지긴 하는데 특정 CV를 넘어서는, 예를 들어 CV=7를 넘어서 8, 9, 10 등등에서의 결과가 전체적으로는 비슷하면서도 어떤 CV값에서는 Test에서의 결과가 best_score보다 높다거나, 다른 CV값에서는 best_score가 Test Dataset보다 높아서 CV값을 어떻게 설정하여 학습을 진행해야 할지 잘 모르겠습니다.

더하여 궁금한 것이 Train에서의 성능보다 Test에서의 성능이 높게 나타나는 게 좋은 것인지 궁금하며

특정 CV값을 넘어서는 n_splits=20 cannot be greater than the number of members in each class. 와 같은 오류가 발생하는데 무엇이 이유인지 알고 싶습니다.

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

1. CV를 몇개로 해야 되는지에 대한 기준은 없습니다. 

보통은 전체 데이터의 20%로 정도로 합니다. 그러면 CV는 5정도 됩니다. 그런데 데이터 건수 자체가 작으면 사실 CV를 몇개로 잡느냐에 따라서 성능 차이가 날 수도 있습니다. 그러니까, 전체 데이터 건수가 작다보니 Validation 용으로 잡히는 데이터 건수도 작아지고, 이로 인해서 validation 데이터로 검증 시마다 편차가 심해 질 수 있습니다. 

이게 전체 데이터 건수가 작기 때문에 cv개수에 따라서 편차가 발생하는 것 뿐이지, 이런 편차를 기준으로 성능을 기준점을 잡는다거나, CV 개수에 너무 민감하게 생각할 필요는 없어 보입니다. 현재 200개의 학습 데이터를 기반으로 CV를 7이상 잡으시면 너무 Validation 데이터가 적어서 이에 따른 변동성은 큰 의미가 없어 보입니다. 

cv를 3또는 5정도로 잡으시고 테스트 결과로 판단하시는게 좋아 보입니다(cv=3 일 경우 학습 데이터가 적어져서 성능 영향도가 발생 할 수도 있을 것 같습니다)

2.흔하진 않지만 Train 보다 Test의 성능이 높게 나타날 수도 있습니다. 학습 데이터의 건수가 200건 정도밖에 안되서 충분히 학습 되지 않은 상태에서 test를 적용해서 그런건 아닌지 의심이 되는 군요. 

3. 아마도 데이터 건수가 작은데 stratified fold 방식으로 n_splits를 20개 나누려다 보니, 특정 label의 건수가 상대적으로 아주 작아서 아예 split이 안되는 현상으로 보입니다. 그러니까 전체 학습 데이터 200건중 특정 label의 건수가 20건이 안되는데 이를 n_splits 20으로 나누려다 보니 오류가 발생하는 것 같습니다. 

 n_splits=20 cannot be greater than the number of members in each class