이 글은 다음 포스트를 읽고 정리한 글임을 밝힙니다.
포스트에서 잘 이해가 가지 않는 부분은 추가로 정리했습니다.
1. PCA란?
- 분포된 데이터들의 주성분을 찾는 방법이다.
- 고차원 데이터를 저차원으로 변환하면서도 데이터의 중요한 정보는 최대한 유지하려는 의도
- 주성분이란, 그 방향으로 데이터들의 분산이 가장 큰 방향벡터를 의미한다.
- 분산이란 데이터가 평균값에서 얼마나 떨어져있는지를 의미한다.
- 분산이 크다는 것은 데이터가 넓게 펼쳐져 있다는 것을 의미한다.
- 이는 데이터의 변동성이 크다는 것을 의미한다.
- PCA는 데이터의 분산을 최대한 유지하려고 한다.
- 데이터의 분산이 클수록 더 많은 정보가 보존된다고 가정하기 때문이다.
2. LS근사와 PCA와의 비교

- PCA로 구한 직선과 LS방법(최소자승법)으로 구한 직선이 다르다.
- LS방법은 직선과 데이터 사이의 거리를 최소화한다.
- PCA는 데이터의 분산이 가장 큰 방향을 구한다.
3. PCA에서 주성분을 선택하는 방법
PCA의 목표는 데이터를 저차원으로 투영하면서도 최대한의 분산을 유지하는 것이다.
이를 위해, PCA는 고차원 공간에서 다음과 같은 방법으로 새로운 축(직선)을 선택한다.
첫 번째 주성분(First Principal Component)
- 분산이 최대가 되는 방향 찾기: 첫 번째 주성분은 데이터의 분산이 가장 큰 방향을 찾는다. 이는 데이터가 가장 넓게 퍼져있는 방향을 의미한다
- 벡터 계산: 이 방향은 데이터의 공분산 행렬(covariance matrix)의 고유벡터(eigenvector) 중 가장 큰 고유값(eigenvalue)에 대응하는 고유벡터로 계산된다.
- 투영: 데이터를 이 고유벡터(주성분) 방향으로 투영한다. 즉, 데이터를 이 새로운 축으로 변환한다.
두 번째 주성분(Second Principal Component)
- 직교 조건: 두 번째 주성분은 첫 번째 주성분에 직교(orthogonal)하면서도 분산이 최대가 되는 방향을 찾는다.
- 벡터 계산: 두 번째 주성분도 데이터의 공분산 행렬의 두 번째로 큰 고유값에 대응하는 고유벡터로 계산된다.
- 투영: 데이터를 이 두 번째 고유벡터 방향으로 투영한다
그 이후 주성분들
세 번째, 네 번째 주성분들도 같은 방식으로 계산된다. 각 주성분은 앞선 주성분들에 직교하면서 최대 분산을 유지하는 방향으로 설정된다.
4. Eigenface와 영상인식 응용
PCA가 영상인식에 활용되는 대표적인 예는 얼굴인식(face recognition)이다. 그리고 이와 관련된 개념 혹은 용어로서 eigenface(아이겐페이스)라는게 있다.
다음과 같은 20개의 45x40 얼굴 이미지들이 있다고 하자.

이미지에서 픽셀 밝기값을 일렬로 연결하여 벡터로 만들면 이들 각각의 얼굴 이미지는 45x40 = 1,800 차원의 벡터로 생각할 수 있다 (즉, 각각의 이미지는 1,800 차원 공간에서 한 점(좌표)에 대응).
이제 이 20개의 1,800차원 점 데이터들을 가지고 PCA를 수행하면 데이터의 차원 수와 동일한 개수의 주성분 벡터들을 얻을 수 있다. 이렇게 얻어진 주성분 벡터들을 다시 이미지로 해석한 것이 eigenface이다 (얼굴 이미지를 가지고 얻은 벡터이기에 eigenface라 부른다). 실제 위 이미지에 대해 얻어진 1,800개의 eigenface들 중 분산이 큰 순서대로 처음 20개를 나열하면 아래 그림과 같다.

위 그림에서 볼 수 있듯이 앞부분 eigenface들은 데이터들에 공통된 요소(얼굴의 전반적인 형태)를 나타내고 뒤로 갈수록 세부적인 차이 정보를 나타낸다. 그리고 더 뒤로 가면 거의 노이즈(noise)성 정보를 나타낸다.
뒷부분의 주성분 벡터들은 데이터 분포에 포함된 노이즈(noise)성 정보를 나타내기 때문에 뒷부분은 버리고 전반부 k개의 주성분 벡터들만을 가지고 원래 데이터를 표현하면 노이즈가 제거된 데이터를 얻을 수 있다. 즉, 원래의 x가 x = c1e1 + c2e2 + ... + cnen일 때 xk = c1e1 + ... +ckek로 x를 근사하는 것이다. 위 얼굴 이미지들에 대해 전반부의 일부(k = 20, 10, 5, 2) eigenface들만을 이용한 근사 이미지들은 아래 그림과 같다

'Study Log' 카테고리의 다른 글
| Out-of-distribution Metrics(FPR95, AUROC, AUPR) (0) | 2024.07.22 |
|---|---|
| Softmax 함수 출력의 의미 그리고 NLL loss (2) | 2024.07.22 |
| NeRF에 대하여 간단하게 정리 (0) | 2024.06.27 |
| Normalize flow 설명 | Flow-based deep generative models (0) | 2024.06.26 |
| [pytorch] 모델 파라미터 출력하기 (0) | 2023.10.20 |