Dimensionality Reduction - Data Compression & PCA

2019. 2. 16. 20:09Artificial Intelligence

* 첨부된 자료의 모든 저작권은 COURSERA에 있음을 미리 밝힙니다.




Dimensionality Reduction 

- Data Compression & PCA




이번에는 주어진 데이터셋의 차원을 낮추는 Data Compression과 그 일종인 PCA에 대해서 알아보고자 한다.


고차원의 데이터에서는 관측단계도 기하급수적으로 증가하고

메모리도 굉장히 많이 차지하기 때문에 많은 문제점이 발생하게 된다.

즉, 차원이 증가하면 이를 표현하기 위한 데이터의 양이 기하급수적으로 증가한다는 것이다.


따라서 기계학습을 시키기 위해서는 이 데이터의 차원을 축소하여 다룰 필요가 생기는데, 

이를 차원 축소(DImensionality Reduction)라 한다.




save image



차원 축소의 의미는 바로 "데이터의 의미를 잘 표현하는 특징을 추려낸다는 것"에 있다. 이 말은, 대부분의 상황에서는 특징벡터(Feature Vector)보다 더 좋은 특징들을 추려내어 이것들을 새로운 특징벡터로 추출해낸다는 것에 있다. 예를 들어 위의 그림에서 x1, x2, x3 로 표현되는 데이터의 특징을 잘 나타내는 것은 z1, z2 벡터이다. 따라서 x1, x2, x3로 이루어진 3차원 특징벡터를 z1, z2의 2차원 특징벡터로 추출해 내어 차원을 축소시키는 것이다.  이를 위해 Principal Component Analysis Algorithm(PCA, 주성분분석 알고리즘)을 주로 사용한다.




PCA Algorithm (Principal Component Analysis)


PCA 알고리즘을 적용한다는 것은 데이터의 특징들을 잘 드러내 줄 수 있는 특징 벡터를 찾는 것이다. 

아래 그림을 예제로 생각을 해 보면 다음과 같다.

왼쪽 첫 번째 그림의 경우 데이터는 2차원이고 이를 PCA를 통해 1차원으로 줄이고자 한다. 이때 1차원으로 차원을 축소했을 때도 데이터의 특징들을 잘 드러내줄 수 있는 벡터의 방향은 파란색으로 쓰여진 U벡터일 것이다. 다시말해, 데이터들의 분산이 가장 큰 방향벡터를 찾는 것이라고도 할 수 있다. 아래 오른쪽 그림의 경우도 마찬가지이다. 3차원의 데이터를 PCA 를 적용하여 2차원 특징벡터로 차원을 축소하고자 할 때, 데이터의 특징들을 잘 드러내줄 수 있는 두 벡터는 U(1), U(2)이다. 따라서 데이터들의 분산이 가장 큰 방향벡터들로 n 차원을 k 차원으로 축소시켜주면 된다. 


save image




구체적인 알고리즘 수행단계는 다음과 같다.

1. Data Preprocessing (전처리 단계)

각각의 Feature마다 데이터의 범위가 다르기 때문에 Feature Scaling, mean normalization을 통해 데이터셋의 범위를 비슷하게 맞춰 주어야 PCA 알고리즘을 보다 효율적으로 수행할 수 있다.


2. Compute "Covariance Matrix" & "EigenVectors" (공분산 행렬,  계산단계)

PCA를 수행하는 과정에서 sigma를 구하고, (sigma = (1/m) * sum(XTX)) 고유값벡터를 sigma에 대하여 구한 다음

이를 1~k까지 줄여 이를 x에다 곱하면 된다.


 (*자세한 원리적인 설명은 여기를 참고하면 좋을 듯 하다)

https://ratsgo.github.io/machine%20learning/2017/04/24/PCA/




save image




Reconstruction from compressed representation

수월한 데이터 연산을 위해 차원을 축소하여 계산을 수행한 뒤에는 차원을 다시 원래대로 되돌려놓아야 할 경우도 생길 것이다. 이를 Reconstruction이라고 하는데, 이는 앞서 PCA를 통해 구한 Ureduce 행렬을 그대로 Z파라미터에 곱해주면 된다.



Choosing the number of principal components

PCA를 수행할 때 주의해야 할 점은 데이터의 분산이 잘 보존되는 쪽으로 수행해야 한다는 것이다. 앞서 복잡한 수식들을 통해 유도한 알고리즘은 차원을 축소할 때, 데이터의 분산이 최대한 잘 보존되도록 만들어준다. 따라서 아래와 같이 99% 이상의 분산이 보존될 수 있도록 K값을 정해주는 것이 중요하다. 




save image


반응형

'Artificial Intelligence' 카테고리의 다른 글

Anomaly Detection  (0) 2019.02.21
Learning Curves  (0) 2019.02.20
UnSupervised Learning - K means Algorithm  (0) 2019.02.16
Spam Classifier - implementation with Octave  (0) 2019.02.14
Spam Classifier - Theory  (0) 2019.02.14