들어가며

이전 글에서는 모델을 훈련시키고 RMSE로 간단하게 평가하는 방법을 알아보았습니다. 그러나 RMSE로 평가하기에는 부족한 점이 있었습니다. 좀 더 자세하게 평가하기 위해서 교차검증(cross-validation)에 대해서 알아보도록 하겠습니다.

교차 검증(cross-validation)

교차검증은 훈련 세트를 K개 만큼 나누어 각각 폴드라고 명시합니다. 그리고 하나의 폴드를 평가를 위한 데이터로 남기고 나머지 폴드를 모델 학습에 사용합니다. 폴드를 선택하는 데는 K개의 경우의 수가 있으므로 K번 훈련, 평가를 반복하고 이 평균값과 표준편차를 추출하여 데이터를 평가할 수 있습니다.

이를 최종적으로 K-fold corss validation이라고 명명합니다.

구현

사이킷런에서 sklearn.model_selection.cross_val_score 모듈을 통해서 간단하게 구현할 수 있습니다.

지난 글에서 LienarRegression 대신 사용한 DecisionTreeRegressor모델을 평가해 보도록 하겠습니다.

https://colab.research.google.com/drive/1wWaPMCEb3ewf3CNKIeu262vQaCG36apw#scrollTo=prLVAvkkcAN3&line=2&uniqifier=1

 

Google Colaboratory

 

colab.research.google.com

결과를 보아하니 오히려 선형 회귀보다 평가가 좋지 않습니다. 결정 트리 모델이 과대 적합되어 이를 야기한 것 같습니다. 이번에는 RandomForestRegressor모델을 사용하겠습니다. 이것은 특성은 무작위로 선택하여 예측을 만들고 이를 평균 내어 작동하는 방식입니다. 여러 모델을 모아서 하나로 만드는 것을앙상블 학습이라고 하며 머신러닝의 정확성을 극대화하기 위해서 사용됩니다.

지금까지 진행한 평가 중 가장 좋습니다. 그러나 아직 훈련 세트에 대한 예측 오류가 검증 세트에 대한 예측 오류보다 현저히 낮으므로 아직 과대 적합되어있는 상태입니다. 이처럼 하이퍼 파라미터 조작을 너무 많이 하지 않는 상태로 여러 개의 모델을 사용하여 최종적으로 가능성 있는 모델을 2 ~ 5가지 찾는 것이 옵션 1로 과대 적합을 최소 하하는 방법입니다.

마치며

이상으로 K-fold cross validation에 대해서 알아보았습니다. 평가방식은 이뿐만 아니라 ROC곡선 PR 등 여러 가지가 존재하며 각각 평가의 중요도가 다를 수 있습니다. 여러가지 모델을 아는 것도 좋지만 평가방식 또한 모델을 여러 관점에서 평가할 수 있으므로 많이 알아두면 좋습니다. 다른 평가방식에 대해선 다른 글에서 정리하도록 하겠습니다.

+ Recent posts