• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

Cross Validation 로 검증한 모델을 예측 모델로 사용할 때에 대한 질문

21.05.03 07:43 작성 조회수 950

0

좋은 강의 감사드립니다! 책을 구매해서 강의와 같이 보고 있는데, 책 + 강의 내용 모두 정말 알차고, 마치 off line 에서 받은 것과 같은 교육 내용을 저렴한 가격에 제공해 주셔서 정말 감사드립니다. ^^

KFold 나 StratifiedKFold, cross_val_score 등의 방법으로 모델을 검증하고나서, 해당 모델로 신규 데이터에 대한 예측을 하는 경우에 대한 질문입니다.

예를 들어 3개 그룹으로 KFold 를 했고 정확도가 [0.98 0.92 0.96]  와 같이 나왔다면, 각 정확도를 내뱉는 모델들은  각각 다른 weight 를 가지는 각기 다른 모델들일 텐데, 최종적으로 어떤 파라메터가 해당 모델에 저장이 되어 예측시 사용되는 것인지요? 아니면 KFold 를 한 k 개의 모델을 모두 저장했다가 예측시 평균값이나 가장 많이 예측하는 클래스로 예측값을 주는 방식을 사용하는 것인지 궁금합니다.

예를들어 만약 선형회귀식을 만들 때도 KFold 를 사용한다면, k개 만큼의 weight vector 가 만들어질 텐데, 어떤 weight vector를 사용하는 것이 좋은 방법이 될 지요?

 1) k 개의 선형회귀 모델을 다 사용하되 앙상블 처럼 각 모델에서 주는 output 들의 평균값을 사용함.

2) k 개의 선형회귀 모델 중에 추정력이 가장 좋은 모델의 weight vector 를 선택해서 향후 예측모델로 사용함.

3) KFold cross validation 결과가 안정적으로 나와 준다면 해당 data 분석에 선형회귀모델 방법이 적합하다고 판단하고, KFold 를 하지 않고 모든 데이터를 그냥 전부 사용해서 최종 선형회귀모델을 만들어서 추후 예측모델로 사용함. (모든 데이터를 training set 으로 사용해 버림) 

위 두 가지 중에 어떤 방식이 좋은 방법이 될지요? 아니면 다른 더 좋은 접근 방법이 있을지 문의드립니다.

그리고 덧붙임 질문이지만....  kFold 와 같은 cross validation 부류의 기법을 사용할 때, fold 개수 만큼 (cross validation 을 사용할 때는 데이터개수 만큼) 생성되는 예측모델을 구성하는 weights 들이 유사한지를 tracking 해서 모델의 안정성을 평가해 보는 것이 의미가 있을지... 혹은 그런 접근 방법도 있는지.... 궁금합니다! 

(Y 의 실측값 vs. Y 의 예측값을  비교해 보는 것이 아닌, 각 모델들의 weights 들이 유사한지를 비교해 보는 것이 의미가 있을지...)

답변 2

·

답변을 작성해보세요.

1

안녕하십니까,

책, 강의 모두 구매해 주셔서 감사드리며, 과분한 칭찬에도 함께 감사드립니다.

1. 예를 들어 3개 그룹으로 KFold 를 했고 정확도가 [0.98 0.92 0.96]  와 같이 나왔다면, 각 정확도를 내뱉는 모델들은  각각 다른 weight 를 가지는 각기 다른 모델들일 텐데, 최종적으로 어떤 파라메터가 해당 모델에 저장이 되어 예측시 사용되는 것인지요? 아니면 KFold 를 한 k 개의 모델을 모두 저장했다가 예측시 평균값이나 가장 많이 예측하는 클래스로 예측값을 주는 방식을 사용하는 것인지 궁금합니다.

=>  K Fold는 모델에 여러번 검증을 수행하기 위해서 만들어진 방법입니다.  일반적으로 검증 데이터를 별도로 구하기 어렵기에, 여러번 학습 데이터와 검증데이터를 변경해 가면서 모델이 특정 학습 데이터에서만 성능이 좋고, 다른 학습 데이터에서는 성능이 떨어지는지등을 확인해보기 위해서 적용합니다. 즉 모델이 데이터의 변경에 얼마나 강건한지 확인해 보기 위한 용도로 사용합니다.

가령 DecisionTree로 만들어진 예측 모델 A가 있고, Logistic Regression으로 만들어진 예측 모델 B가 있을 때 임의의 학습데이터로 학습 시킨 모델을 특정 검증 데이터로 확인해 보니 A모델이 성능이 좋았습니다. 하지만 좀 더 다양하게 검증 데이터로 확인해 본 결과 평균적으로 B 모델이 성능이 좋았다면, B 모델이 일반적으로는 좀 더 좋은 모델일 가능성이 높습니다.  

K Fold는 이처럼 학습/검증 데이터를 변경해 가면서 모델의 성능을 평가하기 위한 방법이지, 서로 다른 모델을 뽑아내기 위해서 사용하는 방법은 아닙니다.

  2. 예를들어 만약 선형회귀식을 만들 때도 KFold 를 사용한다면, k개 만큼의 weight vector 가 만들어질 텐데, 어떤 weight vector를 사용하는 것이 좋은 방법이 될 지요?

 1) k 개의 선형회귀 모델을 다 사용하되 앙상블 처럼 각 모델에서 주는 output 들의 평균값을 사용함.

=> 앞에서 K Fold가 여러 학습/검증 데이터에 강건한 모델을 선택하기 위해서 사용되는 게 본래의 목적이라고 말씀 드렸지만, 실제로는 K 개의 모델을 서로 앙상블처럼 결합해서 결합 모델로 성능을 끌어 올리는 기법도 있습니다. 보통은 Kaggle 경연 대회등에서 개별 K Fold 데이터 세트로 학습된 K개의 모델의 평균 예측값을 기반으로 최종 예측을 하곤 합니다.

2) k 개의 선형회귀 모델 중에 추정력이 가장 좋은 모델의 weight vector 를 선택해서 향후 예측모델로 사용함.

=> K fold중에 가장 추정력이 좋은 모델을 골라내는 것은 의미가 없습니다. k fold 자체가 해당 모델을 여러개를 가지고 테스트를 했을 때 안정적인 성능을 보이는지를 확인하고자 하는 것이 목표입니다. k fold중에 가장 좋은 모델이 다른 데이터 세트에서도 가장 좋은 성능을 보인다는 보장이 없습니다.

3) KFold cross validation 결과가 안정적으로 나와 준다면 해당 data 분석에 선형회귀모델 방법이 적합하다고 판단하고, KFold 를 하지 않고 모든 데이터를 그냥 전부 사용해서 최종 선형회귀모델을 만들어서 추후 예측모델로 사용함. (모든 데이터를 training set 으로 사용해 버림)

=> K Fold는 일반적으로 동일한 모델에 적용합니다. 선형회귀, 트리 회귀 섞어서 하지 않기에, 일반적으로 특정 모델이 K Fold시 성능이 좋다면 나중에는 K Fold 하지 않고 전체를 학습 데이터로 사용합니다. (물론 이렇게 학습 데이터를 좀 더 추가하는 것이 좋을 지,앞에서 말씀 드린대로 개별 K fold로 각각 학습한 모델의 예측치를 평균하는 게 좋은지는 테스트를 해봐야 합니다.

3.

그리고 덧붙임 질문이지만....  kFold 와 같은 cross validation 부류의 기법을 사용할 때, fold 개수 만큼 (cross validation 을 사용할 때는 데이터개수 만큼) 생성되는 예측모델을 구성하는 weights 들이 유사한지를 tracking 해서 모델의 안정성을 평가해 보는 것이 의미가 있을지... 혹은 그런 접근 방법도 있는지.... 궁금합니다! 

(Y 의 실측값 vs. Y 의 예측값을  비교해 보는 것이 아닌, 각 모델들의 weights 들이 유사한지를 비교해 보는 것이 의미가 있을지...)

=> 음... 이 방식은 큰 의미가 없을 것 같습니다. 학습 데이터가 다르면 weights가 달라지는게 당연하기 때문에 굳이 weight의 유사도를 비교해 볼 필요는 없습니다.

감사합니다.

0

명쾌하고도  친절한 답변 감사드립니다! 평소에 데이터 분석을 하면서 궁금했던 질문이기도 했는데 답을 얻어가네요~

정말 도움이 많이 되는 답변이었습니다. 감사합니다 ^^