[머신러닝 순한맛] PCA(Principal Component Analysis) 알고리즘이란? (2)
어제보다 나은 사람이 되기

걱정보단 실행을, 그러나 계획적으로

Box World 자세히보기

AI/Coursera ( Machine Learning )

[머신러닝 순한맛] PCA(Principal Component Analysis) 알고리즘이란? (2)

Box형 2020. 5. 21. 19:08
반응형

여기에서 실패는 하나의 옵션이다.

당신이 실패를 겪지 않았다면, 충분히 혁신하지 않았다는 것이다.

- 엘론 머스크 -

시작하며

저번 포스팅에서 조금 어려울수도 있었던 PCA 알고리즘의 원리에 대해 알아보았습니다. 이번 포스팅에서는 PCA 알고리즘으로 차원을 감소시킨 데이터의 재복원, 알고리즘의 장단점 등을 알아보겠습니다.

이번 포스팅은 'PCA 알고리즘의 원리'를 이해하시고 공부하시면 더욱 효과적입니다.

https://box-world.tistory.com/33

 

[머신러닝 순한맛] PCA(Principal Component Analysis) 알고리즘이란?

″성공의 핵심 요소는 인내심이다.” -Bill Gates- 시작하며  우리 저번 포스팅에서 Data Compression 또는 Dimentianality Reduction의 기본적인 원리를 알아보았습니다. 이번 시간에는 이러한 원리를 바탕으�

box-world.tistory.com

(https://box-world.tistory.com/33

 

[머신러닝 순한맛] PCA(Principal Component Analysis) 알고리즘이란?

″성공의 핵심 요소는 인내심이다.” -Bill Gates- 시작하며  우리 저번 포스팅에서 Data Compression 또는 Dimentianality Reduction의 기본적인 원리를 알아보았습니다. 이번 시간에는 이러한 원리를 바탕으�

box-world.tistory.com


재복원(Reconstruction)

먼저 감소시킨 차원의 데이터를 어떻게 다시 원래의 차원의 데이터로 복원시킬 수 있는지 알아보겠습니다.

$$z = U^T_{reduce} * x$$

예를 들어 n차원에서 k차원으로 데이터를 차원 감소시켰을 때, 차원 감소된 데이터 $z$는 분산도가 가장 높은 k개의 PC들을 가지는 행렬 $U$와 기존 데이터 $x$를 곱함으로써 구할 수 있습니다.

$$x = U_{reduce} * z$$

우리가 다시 복원하려는 원래의 데이터는 $x$입니다. 따라서 $x$에 대해서 식을 정리하면, 위 식이 나오게 됩니다. 이때 $U_{reduce}$는 $n*k$차원, $z$는 $k * 1$차원이므로 원래의 데이터 $x$는 정상적으로 n차원 vector가 되는 것을 확인할 수 있습니다.

그러나 본래대로 복원된 n 차원의 데이터는 차원 감소되기 전 본래의 n 차원 데이터와 조금 다릅니다. 왜냐하면 차원이 감소되었다가 다시 복원되는 과정을 거치면서 데이터가 유실되었기 때문입니다.


Number of PC

** 그렇다면 n 차원의 데이터를 차원 감소시키고 싶다면 몇차원으로 감소시켜야할지 k값은 어떻게 선택해야할까요?**

여기에는 두가지 방법이 있습니다. 첫번쨰 방법을 위한 공식에는 '원래의 점과 PC1까지의 거리(Protection Error)', 그리고 '원점에서부터 원래의 점까지의 거리(Total Variation)' 두가지 요소가 필요합니다.

이 둘의 비율은 원래의 n차원 데이터 x와 k차원으로 감소된 점과의 오차율을 의미하며 이 값이 작을 수록 둘의 차이가 적어지는 것입니다. 이때 오차율이 1%라면, 반대로 99%의 복원율을 갖는다고 생각할 수도 있습니다. 주로 이 오차율에 자주 사용되는 비율에는 1%5%가 있습니다.

이 오차율을 이용하여 다음과 같이 활용하여 몇차원으로 줄일지 결정할 수 있습니다. 우선 우리가 알고리즘을 구현하였다면, k 값1부터 시작하여 1씩 늘려나가면서 각 k 값에 대한 오차율을 구할 수 있을 것입니다. 이때 k값을 늘려나가다가 오차율이 1% 이하가 되는 그떄의 k값을 선택하여 활용하면 되는 것입니다.

예를 들어 k = 16 이었을 때 오차율이 1.18% 였다가, k = 17이 되면서 오차율이 0.99%가 되어서 1% 이하로 되었다면 우리가 감소시킬 차원은 17차원이 되는 것입니다.

몇 차원으로 줄일지 정하는 또 하나의 방법은 특이값 분해(SVD)를 이용하는 것입니다. 제가 이 부분에 대해서 깊이 이해하지는 못했지만 간단하게 SVD가 어떤 역할을 하는지에 대해 설명해보겠습니다.

우리가 PCA 알고리즘을 사용하는 것은 높은 차원에서 낮은 차원으로 데이터를 차원 감소시키기 위함입니다. 이 과정에서 'SVD'는 차원을 낮출 때 데이터들 간의 상관관계를 그대로 유지시켜주는 수단입니다.

다시 말해서 우리가 n개의 PC 중 분산도가 가장 높은 k개의 PC 만을 골라 그곳에 데이터를 투영시켜주게 되는데 아시다시피 이 PC들은 서로 직교 관계에 있습니다. 즉 SVD는 n차원의 PC에서 k 차원의 PC로 줄일 떄 PC들간의 직교 관계를 그대로 유지시켜 주는데 하나의 수단으로 쓰이는 것으로 보입니다.

어쨌든 이 SVD를 이용하여 1에서 K차원 SVD값(S)과 N차원 SVD값의 비율을 뺴서 0.01보다 작게 나오는 k값을 선택하는 것입니다. 이 식을 오른쪽 식처럼 SVD에 대한 항을 우변으로 옮기고 나머지를 좌변으로 옮기면 0.99 이상의 복원율을 만족하게끔 한다는 것을 알 수 있습니다.


PCA 알고리즘의 적용

PCA 알고리즘비지도 학습(unsupervised Leaning)에서 쓰는 알고리즘이지만, 차원을 감소시켜 데이터를 가볍게 하여 머신러닝 학습의 속도를 높인다는 점에서 Supervised Learning에서도 활용이 가능합니다.

Supervised Learning에 대한 복습이 필요하신 분은 아래 포스팅을 참고해주시면 됩니다 :)

https://box-world.tistory.com/6

 

[머신러닝] 비용함수(Cost Function)란

시작하며 오늘 포스팅에서는 머신러닝의 기본적인 모델과 함께 가설함수(hypothesis) 와 비용함수 (Cost Function) 를 알아보며 다음 포스팅에서 알아볼 경사 하강 알고리즘을 위한 기초를 다져보겠습�

box-world.tistory.com

 

우선 적용을 위하여 Labeled된 dataset에서 x 값만 추출해냅니다.Unlabeled Data로 바꾸는 것입니다. 그리고 이 x data에 PCA 알고리즘을 적용하여 차원이 감소된 데이터 'z'를 도출합니다. 그리고 이 z data와 차원이 감소되기 전 매칭되던 y data를 매칭시켜 새로운 training dataset을 생성합니다. 그러면 가설함수나 cost 함수 또한 x 대신 z가 대신하는 것이 가능해집니다. 이렇게 PCA 알고리즘에 의해 새롭게 맵핑된 z data는 test setcv set에도 사용이 가능합니다.

이렇게 PCA 알고리즘을 이용하면 데이터가 가벼워지기 때문에, 메모리나 디스크와 같은 HW 사용을 줄일 수 있으며, 머신러닝 학습속도를 향상시키고 데이터를 시각화(visualization)시키는데에도 유용하게 사용됩니다.

이런 PCA 알고리즘 대표적으로 사용되는 분야가 '얼굴 인식(Face Recognition)'입니다. 간단히 설명드리자면 얼굴 인식에서 사용되는 20 개의 데이터가 45 x 40 이라고 해보겠습니다. 그러면 각 픽셀을 feature라고 생각하면 $45 * 40 = 1800$이므로 데이터는 1800차원의 벡터라고 생각할 수 있습니다.

그러면 우리가 이전에 4차원의 데이터를 2차원으로 줄일 때, 4개의 PC에서 분산도가 높은 2개의 PC만을 걸러내서 데이터를 투영시켰을 때, 이때 분산도가 높다는 것은 데이터에 많은 영향을 준다는 것이었습니다.

그러니 얼굴 인식에서도 1800차원 데이터에 대해 1800개의 PC를 생성하여 분산도가 높은 순으로 뽑아낸 20~30개의 PC에서 뽑아낸 이미지는 데이터에 공통된 요소를 잘 내포하고 있을 것입니다. 이를 EigenFace라고도 합니다. 그리고 분산도가 낮은 PC일수록 세부적인 정보 차이를 나타내게 되며 이를 '노이즈(noise)성 정보'라고 합니다.


그러나 PCA 알고리즘이 항상 좋은 것은 아닙니다. 원래의 데이터에서 차원을 낮춘다는 점에서 feature가 적은 데이터에서 자주 일어나는 Overfit 발생의 여지가 있습니다. 혹은 Overfit이 발생하였을 때, 모델의 차수를 낮추고자 PCA 알고리즘을 사용하는 것보다는 정규화(Normalization)의 람다를 이용하여 문제를 해결하는 것이 훨씬 효과적입니다.

따라서 Data가 복잡하다고 해서 무조건 PCA를 이용하기보다는, 우선 기존의 Data를 이용하여 학습해보고 메모리나 디스크의 부족 문제로 정상적인 수행이 어렵거나 데이터가 무거워 학습 시간이 오래 걸릴 경우 사용하는 것을 추천 드립니다.

반응형