❗️블로그 옮김: https://www.taemobang.com
방태모
안녕하세요, 제 블로그에 오신 것을 환영합니다. 통계학을 전공으로 학부, 석사를 졸업했습니다. 현재는 가천대 길병원 G-ABC에서 Data Science를 하고있습니다. 통계학, 시계열, 통계적학습과 기계
www.taemobang.com
비지도 학습중 하나인 간단한 알고리즘 주성분 분석(PCA : principal components analysis)은 선형대수의 기본적인 개념들을 이용하여 유도할 수도 있다. Rn의 공간에 m개의 점들(points) {x(1),⋯,x(m)}이 있고, 이 점들에 대해 손실 압축(lossy compression)을 적용하길 원한다고 하자. 손실압축은 정보손실이 있지만 메모리를 줄이는 방식으로 점들을 저장하는 것을 의미하며, 정보손실을 최대한 줄이고자한다. 이것이 PCA의 목적이다. 이 점들은 encode하는 한 가지 방법은 이들을 저차원 공간으로 나타내는 것이다. 각 점(point) x(i)∈Rn에 대한 code 벡터 c(i)∈Rl를 찾을 예정이고, l<n이면 code points들은 원 데이터(원래 점들)보다 적은 메모리를 가지게 된다. 결론적으로 우리는 encoding 함수 f(x)=c와 code된 점을 원 데이터로 되돌리는 decoding 함수 x≈g(f(x))을 찾고자한다. PCA는 decoding 함수의 선택에의해 정의된다. decoder를 간단하게 하기위해 행렬곱을 선택한다. 1g(c)=Dc라 하자. 여기서 D∈Rn×l는 decoding을 정의하는 행렬이다(차원이 n×l이므로, 결과적으로 c는 원 데이터의 공간 Rn으로 복원된다). 이 decoder에 대한 최적의 encoder를 찾는 것은 어려운 문제일 수 있다. 이를 쉽게하기 위해 PCA에서는 몇몇 제약들이 필요하다.
○ PCA는 D의 열들이 서로 직교한다고 제약을 둔다. 다만 D는 l=n이 아니면, 여전히 직교행렬은 아님을 주의해라.
○ l<n이면 무수히 많은 해가 존재할 수 있다. 이 문제를 해결하고, unique한 해를 제공하기 위해서 D의 모든 열들은 unit norm을 가진다고 가정한다(즉, 모든 열들이 단위벡터).
위와 같은 두가지 기본적인 idea를 알고리즘에 적용하기 위해서, 첫번째로 해야할 일은 원 데이터의 각 점 x에 대한 최적의 code point c∗를 발생시키는 방법을 찾는것이다. 이를 하기위한 한가지 방법은 원데이터의 점 x와 c∗에 decoding 함수를 걸어주어 복원시킨 점인 g(c∗)간의 거리를 최소화 하는 것이다(차원 축소를 시행하여 메모리를 줄이는데, 정보손실은 최소화하고자하는 idea). 이 거리는 앞서배운 norm 개념을 이용하여 측정할 수 있으며, PCA에서는 L2 norm을 사용한다. 즉, c∗는 다음과 같이 구해진다:
c∗=argminc‖x−g(c)‖2
사실 L2 norm 대신에 squared L2 norm을 사용할 수도 있는데, L2 norm은 비음 함수이며, 이에 대한 제곱 연산은 비음의 인수(L2 norm)에 대해 단조증가(monotonically increasing)이므로 둘다 c를 같은 값으로 최소화 시킨다. 계산의 편의를 위해 squared L2 norm을 사용해 c∗를 정의하자.
c∗=argminc‖x−g(c)‖22
그럼 위 함수는 다음의 연산을 최소화하는 것과 같다.
(x−g(c))T(x−g(c))
=xTx−xTg(c)−g(c)Tx+g(c)Tg(c)
=xTx−2xTg(c)+g(c)Tg(c) (∵g(c)Tx is scalar)
첫번째 항은 c에 무관하기 때문에 제거하고 c∗를 다시 쓰면:
c∗=argminc−2xTg(c)+g(c)Tg(c)
이제 g(c)를 다시 쓰자.
c∗=argminc−2xTDc+cTDTDc
=argminc−2xTDc+cTc (∵D의 모든 열들은 직교)
이제 이 최적화 문제는 벡터 미분을 이용하여 풀 수 있다.
▽c(−2xTDc+cTc)=0
−2DTx+2c=0
c=DTx
알고리즘이 매우 효율적이다. x를 최적으로 encode하기위해서는 단지 행렬-벡터 곱연산만 해주면된다. 정리하면 encoder 함수는 다음과 같이 정의된다.
f(x)=DTx
encode된 점을 다시 원 데이터의 차원으로 복원하는 PCA reconstruction 연산은 행렬 곱만 사용하면 다음과 같이 쉽게 정의된다:
r(x)=g(f(x))=DDTx
그럼 이제 마지막으로 encoding 행렬 D를 유도해보자. 앞서 말했던 원데이터 x와 차원 축소후 복원시킨점 g(c)간에 L2 norm을 최소화시키는 idea를 이용해 c∗를 구한것을 떠올려보자. 이번에도 똑같다. 모든 점들을 동일한 D를 이용해 decode할 것이므로, 모든 점들의 Errors를 성분으로 갖는 행렬의 Frobenious norm을 최소화 시키면된다. 즉:
D∗=argminD√∑i,j(x(i)j−r(x(i))j)2 subject to DTD=Il
앞서 했던 것과 마찬가지로 계산의 편의를 위해 squared L2 norm으로 바꾸고, 줄이고자하는 차원을 l=1로 고려하자. 그럼 D는 single vector d가 된다. 위 식을 다시쓰면:
d∗=argmind∑i‖x(i)−ddTx(i)‖22 subject to ‖d‖2=1
=argmind∑i‖x(i)−dTx(i)d‖22 subject to ‖d‖2=1
스칼라는 벡터의 왼쪽에 써주는게 관례(convention)이며, dTx(i)가 스칼라여서 위와같이 바꿔서 써줬다. 또한 스칼라는 전치를 수행해도 동일하며, 식을 좀더 간소화 하기위해서 행렬 형태로 적자. 이 두 가지를 적용하면 다음과 같이 쓸 수 있다.
=argmind∑i‖x(i)−x(i)Tdd‖22 subject to ‖d‖2=1
=argmind‖X−XddT‖2F subject to ‖d‖2=1
(X∈Rm×n,Xi,:=x(i)T)
제약은 잠깐 생략하고, Frobenius norm 부분을 간소화하기위해 Trace 연산자를 이용해 다시쓰자. 이 과정이 이해가 안되면 앞선 Trace 연산자 설명부분을 다시 보자.
=argmindTr((X−XddT)T(X−XddT))
Trace 연산자 안의 식을 모두 전개하고, d와 무관한 부분은 생략해서 쓰면 다음과 같다.
=argmind−Tr(XTXddT)−Tr(ddTXTX)+Tr(ddTXTXddT)
Trace 연산자는 전치에 대해 불변하므로:
=argmind−2Tr(XTXddT)+Tr(ddTXTXddT)
이제 거의 다왔다. 앞서 설명했던 Trace 연산자의 순서에대해 불변하는 성질과 제약을 이용하면 식이 다음과 같이 크게 간소화된다.
=argmind−2Tr(XTXddT)+Tr(XTXddTddT) subject to dTd=1
=argmind−2Tr(XTXddT)+Tr(XTXddT) subject to dTd=1
=argmind−Tr(XTXddT) subject to dTd=1
=argmaxdTr(XTXddT) subject to dTd=1
=argmaxdTr(dTXTXd) subject to dTd=1
최종식에 어디서 많이보던 반가운 식 고윳값 분해(eigenvalue decomposition)가 있다(dTXTXd=λ1, XTX는 항상 대칭 행렬). 즉 PCA의 최적화 문제는 고윳값분해로 풀릴 수 있으며, 최적의 d는 가장 큰 고윳값을 가지는 XTX의 고유벡터로 주어진다. 이는 줄이고자 하는 차원이 l=1인 경우이며, 여기서는 첫번째 주성분(principal component)만 유도된다. 첫번째 주성분이 가장 큰 고윳값을 가지게된다. 이를 일반화하여 주성분들의 기저(basis)를 유도하면, 행렬 D는 고윳값 크기 순대로 배열된 l개의 고유벡터를 열로 가지게된다.
📝 참고 문헌
[1] Goodfellow, Ian, Yoshua Bengio, and Aaron Courville. Deep Learning. The MIT Press, 2016
- PCA의 목적을 짧게 정리하면, 정보손실을 최대한 줄여 원 데이터의 차원을 축소하는 것이라 할 수 있음 [본문으로]
'Etc' 카테고리의 다른 글
#8 표준편차와 표준오차 (3) | 2020.04.16 |
---|---|
#7 자유도 (0) | 2020.04.16 |
#5 머신러닝 용어 정리 (0) | 2020.04.09 |
#4 구간추정 해석에 대한 고전적 관점과 베이지안 관점 (0) | 2020.04.07 |
#3 다중 검정 (0) | 2020.03.30 |
댓글