인공지능/머신러닝

[머신러닝 - 이론] 차원 축소 - PCA, LLE

바보1 2022. 10. 20. 05:10


앞의 글을 읽으시면 이해에 도움이 됩니다.

2022.10.19 - [Computer Science/머신러닝] - [머신러닝 - 이론] Dimensionality Reduction (차원 축소)

[머신러닝 - 이론] Dimensionality Reduction (차원 축소)

앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.04.08 - [Computer Science/머신러닝] - [머신러닝 - 이론] 머신러닝의 기초 (Fundamental of Machine Learning) [머신러닝 - 이론] 머신러닝의 기초 (Fundamental..

hi-guten-tag.tistory.com


1. PCA란?



PCA(principla component analysis, 주성분 분석)은 가장 인기있는 차원 축소 알고리즘입니다.

먼저 데이터에 가장 가까운 초평면(hyperplane)을 정의한 다음, 데이터를 이 평면에 투영시킵니다.

근데 hyperplane을 찾는게 어려워요.

아래의 그림에서 무엇이 맞는 hyperplane일까요?

누가봐도 c1이 맞는 초평면이겠죠?

다른 방향으로 Projection하는 것 보다 분산이 최대로 보존되는 축을 선택하는 것이 정보가 가장 적게 손실되므로 합리적인 것 가습니다.

이 말은 다른 말로 원본 데이터셋과 투영된 것 사이의 MSE를 Minimize하는 축이 최선의 축이라고 볼 수 있습니다.


1.1 주성분



PCA는 훈련 데이터에서 분산이 최대인 축을 찾습니다.
(위의 그림에서는 c1)

이후 첫 번째 축에 직교하고 남은 분산을 최대한 보존하는 두 번째 축을 찾습니다.
(위의 그림에서는 어쩔 수 없이 c2)

고차원 데이터라면 이 두 축에 직교하는 세 번째 축을 찾으며 데이터의 차원의 수만큼 계속해서 n번째 축을 찾습니다.

i번째 축을 이 데이터의 i번째 주성분(principal component, PC)라고 합니다.

그럼 훈련 세트의 주성분은 어떻게 찾을까요?

바로 Singular Value Decomposition(특잇값 분해)을 통해서 찾을 수 있습니다.

훈련 데이터 행렬을 3개 행렬의 행렬 곱셈으로 분해할 수 있고, 이를 통해서 주성분을 찾을 수 있습니다.

이것에 해당하는 수식은 나중에 자세히 다루도록 하겠습니다

아무튼 원본 데이터에서 주성분을 찾은 후에 투영하면 됩니다.


1.2 적절한 차원 수



그러면 어느 정도 차원으로 줄이는 것이 적절할까요?

통상적으로 차원을 줄일 때, 기존의 분산의 95%정도까지 줄이는 것이 차원을 잘 줄였다고 얘기합니다.

물론 시각화를 해야한다면 2D, 3D로 축소하는 경우가 일반적입니다.

x축은 차원

차원을 줄일수록 분산이 감소하는데 이때 약 150 인근 차원이 가장 적합한 것으로 보입니다.

만약 이렇게 MNIST 데이터를 150차원까지 줄인다면, 784차원에서 150차원으로 줄인 것 입니다.

대부분의 분산은 유지되었지만, 데이터는 원본의 크기는 20% 미만이 되었습니다.

또한 압축된 데이터셋에 PCA 투영의 변환을 반대로 적용하여 784개의 차원으로 되돌릴 수도 있습니다.

하지만 이때 이미 5%의 정보를 잃어버렸기 때문에, 원본 데이터셋을 얻을 수 없습니다.

좌측이 원본, 우측이 압축 후 복원된 이미지

이때 원본 데이터와 재구성된 데이터 사이의 평균 제곱 거리를 재구성 오차(reconstruction error)라고 합니다.


2. LLE (Locally Linear Embedding, 지역 선형 임베딩)



LLE는 강력한 NLDR(nonlinear dimensionality reduction) 기술입니다.



작성 중 …