SVD / PCA 계산에서 새 이미지 맞추기


16

Wikipedia 의 Eigenface 페이지 에서 아이디어를 복제하려고합니다 . 데이터 행렬 (각 이미지가 길이 n 의 벡터로 평탄화 되어 X100 x n 행렬 임)로 표현 된 100 개의 샘플 이미지 에서 SVD 분해를 계산했습니다.XnX100n

X=UΣVT

그 후:

XXT=UΣ2UT

가장 큰 고유 모드 의 하위 집합을 취함으로써 행렬을 근사화 할 수 있습니다 ( σ 1σ 2 ) :qσ1σ2

Xσ1u1v1T+σ2u2v2T++σquqvqT

이제 X가 아닌 이미지를 나타내는 새로운 벡터 주어지면, 새로운 이미지 y 를 가장 잘 표현하기 위해 q 고유 벡터 U 의 가중치를 어떻게 결정 합니까? 병리학 적 사례를 제외 하고이 표현은 독특합니까?yXqUy

요컨대, 내가하고 싶은 것은 이것입니다 (wiki 페이지에서) :

이 고유 얼굴은 이제 기존 및 나타내는 데 사용할 수 있습니다 새로운 얼굴을 : 우리는 할 수 있습니다 프로젝트 고유 얼굴에 대한 새로운 (평균 차감) 이미지를하여 기록하는 방법 평균 얼굴에서 그 새로운 얼굴 다릅니다.

그 투영을 어떻게합니까?


1
미래 독자들은 구현이 가치 가 있다고 생각할 것 입니다.
Emre

답변:


11

"투영"은 벡터 투사 입니다. 벡터의 투영 계산하려면 벡터에 B , 당신은 사용 내적 두 벡터의를 :ab

aproj=a,bb

의 경우, 상기 벡터 성분그 동일 방향으로 놓여 B . 유클리드 공간에서 내부 제품 연산자는내적으로정의됩니다.aprojab

a,b=ab=i=1naibi

여기서 은 벡터 ab 의 성분 수 이고 , ib i 는 각각 벡터 abi 번째 성분입니다 . 직관적으로, 두 벡터의 내부 곱을 계산하면 벡터 a 가 벡터 b 방향으로 이동 하는 것을 알 수 있습니다. 부호있는 수량이므로 음수 값은 투영 연산자에 대한 대체 정의에서 볼 수 있듯이 두 벡터 사이의 각도가 90 도보 다 큰 것을 의미합니다.nabaibiiabab

aproj=|a|cos(θ)b

여기서 는 두 벡터 사이의 각도입니다.θ

그래서, 벡터 주어진 및 기저 벡터의 무리 난을 , 하나는 "얼마나 많이 찾을 수 있습니다 A는 "기초 벡터의 각 방향의 각 간다. 일반적으로, 이러한 기본 벡터는 모두 서로 직교합니다. 귀하의 경우 SVD는 직교 분해 이므로이 조건을 만족해야합니다. 따라서 설명하는 것을 달성하기 위해 고유 벡터 행렬 U를 취하고 각 행렬 열 을 사용하여 후보 벡터 y 의 내부 곱을 계산합니다 .abiaUy

pi=yui

각 내부 곱에서 얻는 스칼라 값 i 번째 고유 벡터 와 벡터 y가 얼마나 잘 정렬되어 있는지 나타냅니다 . 고유 벡터는 직교 이기 때문에 다음과 같이 원래 벡터 y 를 재구성 할 수 있습니다.piyiy

y=i=1npiui

이 표현이 고유한지 물었습니다. 정확히 무엇을 의미하는지 잘 모르겠지만 주어진 벡터 가 임의의 수의 정규 직교 염기에 투영하여 분해 될 수 있다는 점에서 독특하지 않습니다 . 행렬 U에 포함 된 고유 벡터 는 이러한 예 중 하나이지만 다른 수를 사용할 수 있습니다. 예를 들어, y이산 푸리에 변환 을 계산하는 것은 가변 주파수의 복소 지수 벡터의 직교 정규 기반으로 투영하는 것으로 볼 수 있습니다.yUy


큰 답변 감사합니다! "고유 한 (unique)"의 경우, SVD가 제공 한 기본적 의미에서 독창적이었습니다. 나는 직교 정규 기저가 주어지면 계산 하는 가 고유해야한다고 생각합니다. 그러나 기저 직교가 아닌 경우에는 그렇지 않을 수 있습니다 (직교가 아니기 때문에 더 작은 기본 집합을 찾을 수 있습니까)? y
걸려

yy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.