본문 바로가기
유도항법제어/데이터기반제어

[PCA–2] 주성분 분석 (PCA) 알고리즘 유도

by 깊은대학 2021. 2. 19.

m개의 n차원 데이터 x(1),x(2),...,x(m)Rn 이 주어졌다고 하자. 이 데이터를 d차원 공간에 투사해서 차원(dimension)을 축소하는 것이 목적이다.

 

 

 

 

그렇다면 n차원의 부분 공간인 d차원 (d<n)에서 직교 좌표축의 방향을 어떻게 결정해야 데이터의 정보 손실을 최소화할 수 있을까. 다음 그림은 2차원 데이터의 예를 도시한 것이다.

 

 

우선 새로운 좌표축의 원점을 m개 데이터의 평균점 μ에 위치시키도록 하자.

 

μ=1mi=1mx(i)

 

그리고 모든 데이터 x(i)를 n차원의 공간에서 서로 직각인 벡터 d개의 단위 벡터 w1,w2,...,wd 로 이루어진 d차원 부분 공간에 투사한다. 투사된 데이터를 x^(i) 라고 한다면 다음 식이 성립한다.

 

i=1mx(i)μ22=i=1mx^(i)μ22+i=1mx(i)x^(i)22

 

위 식의 왼쪽항은 데이터셋이 주어지면 정해지는 값(상수)이며 오른쪽 항에서 첫번째 항은 투사된 데이터의 분산을 나타내고 두번째 항은 투사 오차(projection error)를 나타낸다.

 

 

따라서 투사 오차를 최소화하는 것은 곧 투사 분산을 최대화하는 것과 동일하다. 아래 그림과 같이 2차원 데이터 예에서는 데이터가 더 넓게 분포된 방향으로 새로운 좌표축을 설정하면 투사 오차가 최소화될 것 같다.

 

 

주성분 분석(PCA)은 투사 오차를 최소화하도록 또는 투사 분산을 최대화하도록 d차원 부분 공간의 좌표축 벡터인 w1,w2,...,wd 를 결정하는 알고리즘이다.

 

x(i)μzi1w1+zi2w2++zidwd=[w1w2wd][zi1zi2zid]=Wzi

 

여기서 zij(x(i)μ)wj축 성분으로서 zij=wjT(x(i)μ) 로 주어지며,

 

zi=WT(x(i)μ)

 

이다.

 

 

WRn×d는 서로 직각인 단위 벡터(orthonormal vectors)로 이루어진 행렬로서 다음 식을 만족한다.

 

WTW=Id

 

여기서 문제는 투사 오차가 최소가 되도록 행렬 W를 어떻게 결정하는가에 있다.

 

이 문제를 다음과 같이 최적화 문제로 정식화 해보자.

 

argminWJ=i=1mx(i)μWWT(x(i)μ)22subject to   WTW=Id

 

여기서 y(i)=x(i)μ 로 치환하면 함수 J는 다음과 같이 쓸 수 있다.

 

J=i=1my(i)WWTy(i)22

 

이제 평균점으로 조정된 데이터셋 y(i)을 열(column)로 하는 스냅샷(snapshot) 행렬을 다음과 같이 정의한다.

 

Y=[y(1)y(2)y(m)]Rn×m

 

그러면 함수 J를 다음과 같이 스냅샷 행렬을 이용하여 표현할 수 있다.

 

J=i=1my(i)WWTy(i)22=trace[(YWWTY)T(YWWTY)]=trace[YT(InWWT)T(InWWT)Y]

 

여기서

 

(InWWT)T(InWWT)=(InWWT)(InWWT)=InWWT

 

가 성립하므로 위 식은 다음과 같이 된다.

 

J=trace[YT(InWWT)Y]=trace[YYT(InWWT)]=trace[YYT]trace[YYTWWT]=trace[YYT]trace[WTYYTW]

 

따라서 원래의 최적화 문제는 다음과 같이 쓸 수 있다.

 

argminWJ=trace[YYT]trace[WTYYTW]subject to   WTW=Id

 

그런데 여기서 YW에 종속적이지 않으므로, 최소화 문제는 다음과 같이 최대화 문제로 바뀌게 된다.

 

argminW(trace[YYT]trace[WTYYTW])=argminW(trace[WTYYTW])=argmaxW(trace[WTYYTW])

 

 

 

 

정리하면 PCA문제는 다음 최적화 문제로 바꿀 수 있다.

 

argmaxW(trace[WTYYTW])subject to   WTW=Id

 

라그랑지 곱수 λij를 이용하여 제약조건이 없는 최적화 문제로 바꾸면 다음과 같다.

 

argmaxWL=trace[WTYYTW]+i=1dj=1dλij(δijwiTwj)

 

여기서

 

δij={1,i=j0,ij

 

이다. 최적화의 필요조건에 의하면 다음 미분식을 만족해야 한다.

 

Lwi=2YYTwi2λiiwij=1,ijdλijwj=0Lλij=δijwiTwj=0

 

여기서 다음 행렬에 관한 미분식을 이용하였다.

 

(trace[ATBA])A=(B+BT)A

 

정리하면 wi와 라그랑지 곱수 λij는 다음 식을 만족해야 한다.

 

YYTwi=λiiwiλij=0,  if  ij

 

따라서 라그랑지 곱수 λiiwi는 각각 행렬 YYT의 고유값과 고유벡터가 됨을 알 수 있다.

이제 행렬 YYT의 고유값과 고유벡터를 계산하면 주성분 분석(PCA) 문제를 풀 수 있다. 먼저 스냅샷 행렬 Y의 특이값 분해(SVD, singular value decomposition)을 구해보자.

 

Y=UΣVT

 

여기서 U=[u1un]n×n 직각 행렬(orthogonal matrix)이고 V=[v1vm]m×m 직각 행렬이며 Σn×m 인 '대각' 행렬이다. 여기서 말하는 '대각' 행렬은 행과 열의 번호가 같은 성분만 0이 아닌 어떤 값을 갖는다는 의미다.

UV가 각각 직각 행렬이므로 다음 식을 만족한다.

 

U1=UT,   V1=VT

 

행렬 Σ의 대각 성분에 있는 0이 아닌 값은 행렬의 특이값 σi이다.

행렬 YYT의 고유값과 고유벡터는 특이값 분해를 이용하여 다음과 같이 구할 수 있다.

 

YYT=UΣ2UT

 

또는

 

YYTui=σi2ui,   i=1,...,n

 

따라서 행렬 YYT의 고유값은 σi2이고 고유벡터는 ui가 된다. 특이값은 큰 수에서 작은 수의 순서로 정렬되어 있으므로 최적의 d차원 (d<n) 직교 좌표축 wi, i=1,...,d 는 다음과 같이 선택하면 된다.

 

W=[w1w2wd]=[u1u2ud]=Ud

 

그러면 좌표축 wi, i=1,...,d 의 축성분은 다음식으로 계산된다.

 

zi=UdT(x(i)μ)

 

복원될 또는 투사된 데이터의 근사값 x^(i)는 다음과 같이 계산된다.

 

x^(i)=μ+Udzi

 

또한 투사 오차는 다음과 같이 계산된다.

 

J=i=1my(i)WWTy(i)22=trace[YYT]trace[WTYYTW]=trace[UΣ2UT]trace[UdTUΣ2UTUd]=i=1rσi2i=1dσi2=i=d+1rσi2

 

여기서 r은 평균점으로 조정된 스냅샷 행렬 YRn×m의 랭크(rank)다. 따라서 축소 차원 dd=r로 선택하면 투사 오차는 0이 된다.

일반적으로 축소 차원 d는 설계자가 미리 설정한 투사 오차 비율 η보다 작도록 다음과 같이 선정한다.

 

i=d+1rσi2i=1rσi2=1i=1dσi2i=1rσi2η

 

 

 

댓글