Intro to machine learning - (13) Validation
이번 강의에서는 Validation에 대해서 이야기하고 있습니다.
물론 이전에도 알고리즘을 돌리면서 Validation을 했지만, Scikit Learn에서 쓰이는 Cross Validation을 중심으로 이야기하고 있습니다.
지금까지 예제를 보면, 데이터를 Train, Test로 분할해서 활용한 이유는,
-
독립된 데이터에 성능을 측정하기 위해
-
모델의 과적합(Overfitting)을 확인하기 위해
이렇게 두 가지로 볼 수 있습니다.
Train/Test 데이터를 PCA를 거쳐서 SVM으로 예측하는 Task가 있다고 합시다.
-
Train Feature로 PCA를 Fit, Transform한 뒤, 모델을 학습합니다.
-
Test Feature로는 PCA를 Transform한 뒤, 학습된 모델로 y_test를 예측합니다.
이때 중요한 것은 Train Feature로 학습된 PCA를 Test Feature에 그대로 적용하는 것입니다. Train의 Component들을 Test에 그대로 적용하는 것입니다.
이번에는 Cross Validation에 대해서 알아보겠습니다. 기본 개념은 데이터를 같은 크기의 조각으로 나누는 것입니다.
그 중 가장 많이 쓰이는 것이 K-Fold Cross Validation입니다.
데이터를 K개로 나눠서, 한 조각만 빼고 나머지를 Train Data로, 빼둔 한 조각을 Test Data로 사용하여 모델의 성능을 평가합니다. K개로 나눠진 데이터들이 한번씩 Test Data의 역할을 하기 때문에, 모델이 K번 돌게 되는 것입니다. 이 결과들의 평균으로 모델을 평가합니다.
하지만 분류 문제를 풀 때, 종종 클래스 불균형(Class imbalance) 문제가 발생합니다. 한 Class가 다른 Class보다 월등하게 많기 때문에 Fold를 나눌때도 불균형하게 나누어지고, 따라서 모델의 성능에도 영향을 미칩니다. 이러한 문제의 해결을 위해서 학습할때 가중치를 두거나, Class의 균형이 많도록 데이터를 더 많도록, 혹은 적도록 Sampling 할수도 있습니다. Cross Validation에도 이러한 문제의 해결을 위해 Stratified K-Fold가 있습니다.
균형을 맞추고자 하는 `Y`를 파라미터로 넣어주면 됩니다. 모든 Fold가 각 Class를 같은 숫자로 가지게 됩니다.
Cross Validation은 Parameter Tuning에도 활용될 수 있습니다.
Parameter들의 조합을 넣고, Grid Search의 성능을 Cross Validation을 통해 평가하는 것입니다. 이를 통해 안정적인 방향으로 어떤 Parameter의 조합이 가장 좋은 결과를 내는지 볼 수 있습니다.