본문 바로가기
지식공학/기계학습

PCA(Principal Component Analysis)의 이해

by Eric87 2021. 7. 26.
반응형

성분 분석, 영어로는 PCA(Principal Component Analysis).

주성분 분석(PCA)은 사람들에게 비교적 널리 알려져 있는 방법으로서, 다른 블로그, 카페 등에 이와 관련된 소개글 또한 굉장히 많다. 그래도 기존에 이미 있는 내용들과 차별성이 있다면 이 글은 주성분 분석(PCA)을 자신의 공부, 연구 또는 개발에 보다 잘 활용할 수 있도록 주성분분석(PCA)의 다양한 활용예를 중심으로 기본 원리 등을 가급적 폭넓게 다뤄보고자 한다. 주성분 분석(PCA)은 사실 선형대수학이라기 보다는 선형대수학의 활용적인 측면이 강하며 영상인식, 통계 데이터 분석(주성분 찾기), 데이터 압축(차원감소), 노이즈 제거 등 다양한 활용을 갖는다. PCA(Principal Component Analysis)에 대한 계산 방법이나 이론적인 부분은 뒤에 가서 다루고 일단은 PCA에 대한 개념 및 활용적인 측면을 먼저 살펴보도록 하자.

1. PCA(Principal Component Analysis)란?

PCA는 분포된 데이터들의 주성분(Principal Component)를 찾아주는 방법이다. 좀더 구체적으로 보면 아래 그림과 같이 2차원 좌표평면에 n개의 점 데이터 (x1,y1), (x2,y2), ..., (xn,yn)들이 타원형으로 분포되어 있을 때

PCA in 2-D(left) and 3-D(right)

이 데이터들의 분포 특성을 2개의 벡터로 가장 잘 설명할 수 있는 방법은 무엇일까? 그건 바로, 그림에서와 같이 e1, e2 두 개의 벡터로 데이터 분포를 설명하는 것이다. e1의 방향과 크기, 그리고 e2의 방향과 크기를 알면 이 데이터 분포가 어떤 형태인지를 가장 단순하면서도 효과적으로 파악할 수 있다. PCA는 데이터 하나 하나에 대한 성분을 분석하는 것이 아니라, 여러 데이터들이 모여 하나의 분포를 이룰 때 이 분포의 주 성분을 분석해 주는 방법이다. 여기서 주성분이라 함은 그 방향으로 데이터들의 분산이 가장 큰 방향벡터를 의미한다. 위 그림에서 e1 방향을 따라 데이터들의 분산(흩어진 정도)이 가장 크다. 그리고 e1에 수직이면서 그 다음으로 데이터들의 분산이 가장 큰 방향은 e2이다. PCA는 2차원 데이터 집합에 대해 PCA를 수행하면 2개의 서로 수직인 주성분 벡터를 반환하고, 3차원 점들에 대해 PCA를 수행하면 3개의 서로 수직인 주성분 벡터들을 반환한다. 예를 들어 3차원 데이터의 경우는 위 그림과 같이 3개의 서로 수직인 주성분 벡터를 찾아준다.

2. eigenface와 영상인식 응용

PCA가 영상인식에 활용되는 대표적인 예는 얼굴인식(face recognition)이다. 그리고 이와 관련된 개념 혹은 용어로서 eigenface(아이겐페이스)라는게 있다. 다음과 같은 20개의 45x40 얼굴 이미지들이 있다고 하자.

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

Eigenface

위 그림에서 볼 수 있듯이 앞부분 eigenface들은 데이터들에 공통된 요소(얼굴의 전반적인 형태)를 나타내고 뒤로 갈수록 세부적인 차이 정보를 나타낸다. 그리고 더 뒤로 가면 거의 노이즈(noise)성 정보를 나타낸다. 앞서 PCA를 통해 얻어진 주성분 벡터들은 서로 수직인 관계에 있다고 말한 바 있다. 이 말은 주성분 벡터들이 n차원 공간을 생성하는 기저(basis) 역할을 할 수 있음을 의미한다. 즉, PCA로 얻은 주성분 벡터들을 e1, e2, ..., en라면 임의의 n차원 데이터 x는 x = c1e1 + c2e2 + ... + cnen과 같이 ei들의 일차결합으로 표현될 수 있다 (이 때, 상수계수 ci들은 x와 ei의 내적 즉, ci = x·ei로 계산할 수 있으며 이와 같이 어떤 데이터 집합의 데이터들을 그들의 주성분 벡터들의 일차결합으로 표현하는 것을 Karhunen–Loève transform (KLT) 또는 Hotelling transform이라 부른다). 그런데, 뒷부분의 주성분 벡터들은 데이터 분포에 포함된 노이즈(noise)성 정보를 나타내기 때문에 뒷부분은 버리고 전반부 k개의 주성분 벡터들만을 가지고 원래 데이터를 표현하면 노이즈가 제거된 데이터를 얻을 수 있다. 즉, 원래의 x가 x = c1e1 + c2e2 + ... + cnen일 때 xk = c1e1 + ... +ckek로 x를 근사하는 것이다. 위 얼굴 이미지들에 대해 전반부의 일부(k = 20, 10, 5, 2) eigenface들만을 이용한 근사 이미지들은 아래 그림과 같다.

그림에서 볼 수 있듯이 많은 수의 eigenface를 이용하면 원본 얼굴과 거의 유사한 근사(복원) 결과를 볼 수 있지만 k가 작아질수록 개인 고유의 얼굴 특성은 사라지고 공통의 얼굴 특성이 남게 된다 (k=20인 경우 원래 얼굴이 그대로 살아나지만 k=2인 경우 개인간의 구분이 거의 사라짐을 볼 수 있다). k개의 주성분 벡터만을 이용하여 원래 데이터를 표현하는 것은 통상적으로 근사라는 용어보다는 복원(reconstruction)이라는 용어가 주로 사용된다. 노이즈(noise)에 대해 좀더 생각해 보면, 앞서 말했듯이 PCA는 개별 데이터에 대한 분석이 아니라 전체 데이터에 대한 집합적 분석 도구이다. 만일 강아지 100마리에 대한 PCA 분석 결과와 고양이 100마리에 대한 PCA 분석 결과가 있다고 하자. 이 때, 강아지 데이터에서 얻어진 eigenface들 중 앞의 것들은 (고양이와 구분되는) 강아지 고유의 형태 정보를 나타내고 뒤로 갈수록 강아지들 내부에서 강아지들 사이의 차이점을 표현할 수 있는 정보를 나타낸다. 그리고 더 뒤로 나아가면 노이즈성 정보를 표현한다. 마찬가지로 고양이 데이터에 대한 eigenface들은 주요한 성분일수록 고양이 공통의 성분, 뒤로 갈수록 고양이 개체 사이의 차이를 가르는 요소를 나타낸다. 그런데, 어디서 어디까지가 데이터 공통 성분이고 어디까지가 데이터의 차이인지, 그리고 어디부터 노이즈 성분인지 그 구분은 명확하지 않다. 그 경계를 이론적으로 계산하는 방법론 등도 있긴 하지만 대부분은 응용에 따라서, 그리고 데이터에 따라서 주관적으로 또는 실험적으로 결정하는 것이 통상적이다. 위에서 설명한 k개의 주성분 벡터만을 이용하여 원래 데이터를 표현하는 것은 관점에 따라서 차원 감소(dimension reduction), 데이터 압축(compression), 노이즈 제거 등으로 다양하게 해석될 수 있다. 먼저, 차원감소라 함은 n차원의 데이터를 xk = c1e1 + ... + ckek로 표현했을 때 e1, ..., ek를 새로운 좌표축으로 하는 공간에서 x를 (c1, c2, ..., ck)와 같이 k차원의 점으로 표현한다는 의미이다. 둘째, 데이터 압축의 의미는 {x}들을 그대로 저장하지 않고 k개의 주성분 벡터들과 계수 (c1, .., ck)들만을 저장하면 저장용량을 크게 줄일 수 있다는 의미이다. 참고로 SVD(특이값분해)를 이용한 데이터 압축은 데이터를 개별적으로 압축하지만 PCA는 데이터를 집합적으로 압축한다는 점이 다르다. 마지막으로 노이즈 제거란 의미는 k개의 주성분만을 이용해서 데이터를 복원함으로써 의미없는 노이즈 부분을 날린다는 의미이다.

3. PCA를 이용한 얼굴검출과 얼굴인식

먼저, 컴퓨터 비전에서 사용하는 detection과 recognition의 차이를 살펴보면 face detection은 사람 구분없이 그냥 얼굴을 찾는 것이고, face recognition은 이 얼굴이 누구 얼굴인지를 알아내는 것을 말한다.

i) face detection 응용

PCA를 얼굴검출에 응용하기 위해서는 먼저 수많은(최소 1,000개 이상) 얼굴 샘플들을 모아서 eigenface들을 구한 후 얼굴로서 의미가 있다고 생각되는 전반부 k개의 eigenface들만을 선택한다. 이후 테스트할 입력 영상(윈도우 영역) x가 들어오면 x를 k개의 eigenface들만을 이용하여 복원(reconstruction) 했을 때 원래 영상 x와 얼마나 가까운지를 살펴본다. 만일 x가 k개의 eigenface를 조합해서 완벽히 근사된다면 x는 얼굴일 확률이 매우 높다. 또 하나의 판단 기준은 이렇게 근사된 xk가 평균적인 얼굴(average face)과 얼마나 가까운가이다. x가 아무리 eigenface들로 근사가 잘 되어도 실제 평균 face와 동떨어져 있다면 face로 보기 힘들다. 따라서, x에 대한 최종 판단은 얼마나 근사가 잘 되는지와 근사된 얼굴이 실제 얼굴 이미지 평균과 얼마나 차이가 있는지를 종합적으로 고려하여 판단한다. 이러한 두 평가기준의 차이를 그림으로 나타내면 아래 그림과 같다. 그림에서 DFFS는 얼마나 근사가 잘 되는지를 나타내고 DIFS는 근사된 얼굴이 얼굴 평균과 얼마나 가까운지를 나타낸다.

ii) face recognition 응용

PCA를 recognition에 응용할 때에는 조금 방법이 다르다. 먼저, 모든 사람의 얼굴 샘플을 모을 필요가 없으며 인식 대상이 되는 사람들의 얼굴 샘플들만을 모은다 (예를 들어 보안시스템의 경우 출입이 허가된 사람들의 얼굴 샘플). 이들 샘플들에 대해 PCA를 통해 k개의 주요 eigenface들을 구한 후 각 개인들을 eigenface로 근사했을 때의 근사계수를 저장한다. 즉, xk = c1e1 + ... + ckek일 때 (c1, ..., ck)를 개인의 고유 feature로 저장한다. 이후 입력 데이터 x가 들어왔을 때 이를 k개의 eigenface로 근사한 근사계수가 미리 저장된 개인별 근사계수들 중 누구와 가장 가까운지를 조사하여 x를 식별한다.

반응형

'지식공학 > 기계학습' 카테고리의 다른 글

Histogram of Oriented Gradients  (1) 2022.03.04
Generative Adversarial Network Loss Functions  (0) 2021.08.31
The Gaussian Distribution  (0) 2021.07.20
Binary Variables  (0) 2021.07.20
Gradient Descent Optimization  (0) 2021.06.29

댓글