차원의 저주 그리고 PCA (Principal Component Analysis)

Ganni
7 min readMar 20, 2021

--

데이터에 변수가 많을수록 무조건 좋은 것일까?

Woody : … so many features

모델의 성능에 영향을 주는 요인은 무엇이 있을까? 다양한 요인이 있지만 이번 글에서는 데이터의 ‘차원’에 대해 한번 이야기해보고자 한다.

‘차원의 저주’ 라는 말이 있다. 간단히 말하면 데이터의 차원이 증가할수록 모델의 성능이 저하되는 현상을 의미하는데, 이를 해결하기 위한 방법에는 PCA 와 같은 차원을 축소하는 방법이 있다. 먼저 차원이 증가하면 어떤 현상이 발생하는지부터 알아보도록 하자.

Curse of Dimensionality

데이터의 차원이 증가한다는 것은 데이터의 변수의 수가 증가하는 것을 말한다. 이때 단순히 변수의 수가 증가하는 것이 아니라 관측치 수보다 변수의 수가 많아지는 상황을 차원의 저주에 빠졌다고 한다.

그렇다면 왜 이러한 상황이 모델의 성능을 나쁘게 만드는 것일까?

https://www.freecodecamp.org/news/the-curse-of-dimensionality-how-we-can-save-big-data-from-itself-d9fa0f872335/

위 그림을 보면 1차원 데이터에 5개의 샘플이 있고 그 중 하나의 샘플은 전체 데이터의 1/5 밀집도를 가지고 있다고 할 수 있다. 하지만 이 데이터가 2차원이 되면 하나의 샘플은 전체의 1/25 밀집도를 가진다. 다시 말해 동일한 밀집도를 갖기 위해서는 한 샘플 당 5배의 데이터가 필요하다. 데이터가 3차원이 되면 하나의 샘플은 전체의 1/125 밀집도를 가지고 1차원 데이터와 동일한 밀집도를 갖기 위해서는 한 샘플 당 25배의 데이터가 필요하다.

즉, 차원이 증가할수록 데이터의 밀집도는 줄어들고 (빈 공간이 많아지고) 필요한 데이터의 양은 exponentially (^n) 증가한다.

https://www.freecodecamp.org/news/the-curse-of-dimensionality-how-we-can-save-big-data-from-itself-d9fa0f872335/

또한 차원이 증가함에 따라 데이터의 한 샘플(점)이 나타내는 영역이 작아지는데, 위 그림과 같이 원과 구를 생각해보면 알 수 있다.

2차원 영역의 경우 전체 사각형의 넓이가 (2r)², 원의 넓이가 πr² 으로 전체 공간에서 원이 차지하는 비율이 약 78.5% 이다.

3차원 영역의 경우 전체 정육면체의 부피가 (2r)³, 구의 부피가 4πr³/3 으로 전체 공간에서 구가 차지하는 비율이 약 52.4% 이다.

차원이 증가할수록 점점 이 비율은 다음과 같이 작아지게 된다.

https://www.freecodecamp.org/news/the-curse-of-dimensionality-how-we-can-save-big-data-from-itself-d9fa0f872335/

결과적으로 데이터의 샘플들의 거리는 서로 점점 멀어지게 된다. 이 현상은 euclidean distance 와 같은 metric 을 사용할 때 왜곡이 매우 심해져 해당 metric 이 제대로 동작하지 않는 문제를 초래할 수 있다.

또한 차원이 증가할수록 처리해야할 데이터에 대한 시간 및 공간 복잡도(complexity)도 증가해 효율성이 매우 떨어질 것이다.

이처럼 차원의 저주가 만들어내는 문제들을 우리는 어떤 방법으로 해결할 수 있을까? 바로 차원을 축소하는 것이다.

Dimension Reduction

데이터에서 중요한 변수를 선택하거나 추출함으로써 차원을 축소한다.

https://www.researchgate.net/figure/Difference-between-feature-extraction-and-feature-selection_fig1_339209170
  • Feature Selection : 데이터 분석 목적에 맞는 소수의 변수만을 선택

→ 장점은 선택한 변수에 대한 해석이 용이하다. 단점은 변수간 상관관계를 고려하기 어렵다.

  • Feature Extraction : 변수의 변환을 통해 새로운 변수 추출

→ 장점은 변수간 상관관계를 고려할 수 있고 보통 변수의 개수를 많이 줄일 수 있다. 단점은 추출된 변수에 대한 해석이 어렵다.

각각의 방법을 지도 학습 혹은 비지도 학습으로 구현함에 따라 다음과 같이 차원 축소 방법들을 구분할 수 있다.

  • Supervised Feature Selection : Information gain, Stepwise regression, LASSO, Genetic algorithm, …
  • Supervised Feature Extraction : PLS (Partial Least Squares)
  • Unsupervised Feature Selection : PCA loading
  • Unsupervised Feature Extraction : PCA (Principal Component Analysis), Wavelets transforms, Autoencoder

이 중에서 우리는 가장 대표적인 방법 중 하나인 PCA 에 대해 알아보도록 하자.

PCA (Principal Component Analysis)

고차원 데이터의 서로 연관이 있는 변수들의 선형 결합을 통해 저차원의 서로 연관이 없는 변수들(Principal components, 주성분)로 변환하는 차원 축소 방법이다.

아래 그림을 보면 왼쪽의 2차원 공간의 데이터가 오른쪽의 분홍색 사선축으로 선형 변환되어 1차원 공간에 놓인 것을 확인할 수 있다.

이때 분홍색 축은 원본 데이터의 정보(분산)를 최대한 보존하는 축(기저 벡터)으로 PCA 의 목적은 바로 이러한 축을 찾는 데에 있다.

이 과정은 아래와 같은 순서대로 진행된다.

https://towardsdatascience.com/interpret-principal-component-analysis-pca-b8b4a4f22ece

먼저 데이터의 변수 별로 스케일이 다르기 때문에 데이터 정규화를 진행한다. 정규화된 변수들의 상관관계를 나타내는 공분산을 계산해 공분산 행렬을 만든다. 그리고 공분산 행렬을 고유벡터와 고유값으로 분해한다.

고유벡터와 고유값을 내림차순으로 정렬한다. 고유값이 큰 순서대로 k 개의 고유벡터를 선택한다. 이때 가장 큰 고유값을 갖는 고유벡터는 주어진 데이터에 대해서 분산(정보)을 가장 크게 유지하는 것으로 첫 번째 Principal component 로 사용된다.

마지막으로 고유벡터에 데이터를 투영시키면 정보를 최대한 보존하면서 차원이 k 개로 줄어든 데이터로 변환이 된다.

https://devopedia.org/principal-component-analysis

결과적으로 PCA 기술은 고차원의 데이터를 압축해 차원의 저주로 발생한 문제를 해결하면서 고차원에서는 불가능했던 데이터 시각화에도 도움을 줄 수 있다. 또한 주성분을 뽑아냄으로써 데이터의 이상치를 제외하고 데이터가 갖고 있는 내재적 속성을 밝힌다는 점에서 매우 중요한 의미를 갖고 있다.

References

--

--