ML

교차검증(Cross-validation)과 차원축소(Dimension Reduction)

LYShin 2022. 12. 5. 13:25

- 본 글에서는 교차검증과 차원축소에 대해 간단히 소개합니다.

 

 

 

1. Cross-Validation

 

교차검증이란 하나의 데이터 셋에서 무작위로 검증용 데이터를 뽑아 세팅하여 학습하고, 학습된 모델을 비교하는 방법을 말합니다. 학습에 필요한 데이터가 많지 않은 경우 자주 사용하는 방법입니다. 일반적으로 학습 속도가 빠른 모델을 사용하는 경우 자주 사용하게 되며, 앙상블을 위해 사용하기도 합니다.

 

 

2. K-fold Cross Validation

 

K-fold CV는 교차검증 방법 중 가장 대중적으로 사용되는 방법론입니다. 데이터셋을 k개로 나눕니다. 나누어진 각 데이터를 fold라고 하며 fold 내에서 Training set과 Validation set으로 나누어 학습을 진행합니다.

 

K-fold CV는 k-1개의 데이터셋을 사용하여 모델을 만들기 때문에 학습시간을 절약할 수 있습니다. 하지만 학습 데이터를 우리가 원하는 개수보다 훨씬 적게 사용하게 된다는 단점이 있습니다.

현실에서 분석을 하게된다면 굉장히 많은 데이터를 사용하게 될 것이고, 학습시간이 너무 많이 소요되기 때문에 K-fold CV를 사용하는 것이 효율적일 것입니다.

 

 

 

3. Dimension Reduction

 

차원 축소는 입력으로 주어진 데이터의 특성을 유지하면서 차원을 축소하는 방법입니다. 차원을 축소하면 데이터의 저장공간이 줄어들고 연산이 줄어든다는 장점이 있습니다.

 

차원 축소는 방법이 어찌 되었든, 정보를 줄이는 과정이기 때문에 분석에 악영향을 끼치는 것이라는 생각이 들 수 있습니다. 그러나 차원 축소를 하여 정보를 줄일 때 노이즈가 되는 차원만을 줄여 전처리로써의 역할을 해 더 나은 모델의 성능을 얻을 수도 있습니다. 즉, 분석에 방해가 되는 차원을 제거함으로써 연산처리를 빠르게 만들고 모델의 성능을 높일 수 있는 하나의 방법입니다. 

 

큰 틀에서 차원축소는 두 개의 방법이 있습니다.

 

첫 번째로 특성 선택입니다. 전체 요인 중 특정 소수의 특성만을 선택하여 차원을 축소하는 방법입니다. 예를 들어, 특성을 통해 당뇨병에 걸릴 확률을 구하고 싶다면 형제가 있는지에 대한 특성은 필요가 없을 것입니다. 이런 경우 필요한 특성들만 선택함으로써 차원을 축소할 수 있습니다. 

 

두 번째로 특성 추출입니다. 차원 축소 이후 작업을 고려하여 특성을 추출하여 차원을 축소하는 방법입니다. 예를 들어, 단순히 키만 크다고 당뇨병이 더 잘 걸리지 않을 것입니다. 하지만 몸무게와 키의 비율은 당뇨병에 꽤 직접적인 특성이 될 것입니다. 따라서 (몸무게 - 키 + 100) 이라는 특성으로 정의하는 것입니다. 즉 여러 개의 특성을 조합하여 하나의 특성으로 사용하는 방법이 특성 추출입니다. 

 

그렇다면 특성 선택을 어떻게 하는가에 대한 질문이 있을 것입니다. 

 

특성을 한 개씩 선택하여 모델을 만들어 각 모델의 성능을 비교하여 가장 성능이 높은 경우가 되는 특성들을 선택하는 방법을 전진 선택법이라고 합니다. 

 

반대로 모든 특성을 선택한 모델부터 특성을 제거해나가며 모델을 만들어 가장 높은 성능을 갖는 특성을 선택하는 것을 후진 제거법이라고 합니다. 이 과정에서 성능이라 함은 검증용 데이터를 활용한 성능을 의미합니다.

 

이 과정에서 특성 별로 목적 변수와의 상관관계를 그려보면, 보다 효율적으로 특성을 선택할 수 있을 것입니다.

 

특성 추출은 특성 선택보다 어려운 알고리즘을 갖습니다. 그중 가장 일반적인 알고리즘이 PCA입니다.

 

원래의 좌표평면에서 새로운 축을 초록색 축을 그려봅니다. 원래의 x = [x1, x2]라고 한다면 2차원의 x좌표를 1차원으로 줄이고 싶습니다.  [a, b]을 따르는 새로운 축을 그려본다면, 초록색 선과 같은 축을 만들게 됩니다. 이제 2차원의 x좌표와 초록색 선이 직교하는 점을 찾습니다. 새로운 x*는 (a * sqrt(a**2+b**2))*x1 + (b * sqrt(a**2+b**2))*x2로 나타낼 수 있게 됩니다.

 

그렇다면 PCA는 어떤 축을 가장 이상적인 축으로 고려하는가에 대해 생각해 볼 필요가 있습니다. PCA에서 가장 좋은 축은 분포가 가장 넓게 퍼져있는 축입니다. 분포가 넓다라는 것의 의미는 데이터 간 차이가 가장 잘 드러난다는 것입니다. 데이터 간 분간이 잘 되어야 머신러닝 과정에서 예측 혹은 분류를 잘 수행하게 되기 때문에 PCA에서는 분포가 가장 넓은 축을 기준으로 차원 축소를 하게 됩니다.