1. SVD(Singular Value Decomposition)
: 특이값 분해라고 부르며 (1)식과 같이 행렬A 를 특정 구조로 분해하는 방식이다.
——————–(1)
http://tlaja.blog.me/220724083168 에서 고유값(대각화) 분해라는 것을 배웠다
간단히 복습하자면
정방행렬A 가 어떤벡터x 를 선형변환 시킬 때,
행렬A의 선형변환 특성을 고유값 분해를 통해 간단히 표현할 수 있게 된다.
하지만 고유값 분해는 nxn 정방행렬A 가 n 개의 일차독립인 고유벡터를 가질 때
가능하다는 까다로운 조건이 있다.
SVD는 고유값분해의 까다로운 조건을 무시하고 모든 mxn 행렬에 대해 적용이 가능하다.
-기하학적 의미
x’=Ax 라는게 있을 때, 다시 말해 벡터x 가 행렬A에 의해 x’으로 선형변환이 될 때,
직교행렬은 기하학적으로 회전변환(rotation),반전된 회전변환(reflected rotation)을 의미하고
대각행렬은 기하학적으로 스케일변환을 의미한다.
편의를 위해 (1)식을 다시적는다.
—————————(1)
계속, 그런 의미에서 벡터x 는 VT 에 의해 회전변환을 하고
Σ 에 의해 스케일변환을 하고
U 에 의해 다시 회전을 하게 된다.
아래 그림은 직관적 이해를 도울 것이다.
<특이값 분해 출처:위키피디아>
2. SVD 계산법
—————————(1)
-U(Left singular vector) 구하기
1) AAT를 구한다.
2) AAT의 고유값, 고유벡터를 구한다.
3) AAT의 각 고유벡터를 정규화한다. (정규화 : 벡터의 크기가 1인 단위벡터로 만드는 것)
4) U 만들기
-VT(Right singular vector) 구하기
1) ATA를 구한다.
2) ATA의 고유값, 고유벡터를 구한다.
3) ATA의 각 고유벡터를 정규화하고 전치행렬로 변환한다.
– Σ 구하기
Σ는 AAT, ATA를 고유값 분해 해서 나오는 고유값들에 square root를 취한 값을
대각원소로 하는 mxn 직사각 대각행렬로 그 대각원소들을 A의 특이값이라 부른다.
U Σ VT
-참고
1) U와 V는 직교행렬(Orthogonal Matrix)이다.
: UUT = VVT = E, U-1=UT, V-1=VT
2) U와V를 구할때 AAT와 ATA를 고유값 분해하였다.
: AAT와 ATA는 대칭행렬이므로 항상 고유값 분해가 가능하다.
3) AAT와 ATA의 고유값들은 모두 0이상이며 0이 아닌 고유값들은 서로 동일하다.
: 0이상이여야 square root를 취할 수 있고, 서로 동일해야 하나의 행렬Σ 로 표현가능하다.
– 용도
1)선형근사(pseudo inverse)
pseudo inverse는 의사역행렬 이라고 표현된다.
A의 pseudo inverse을 A+라고 하면 A의 역행렬이 없는 경우
Ax = b 의 해를 x = A+b 라고 할수 있으며 이렇게 구한 x는 ∥Ax-b∥를 최소화 하는 해가 된다.
즉, 최소자승법 ( http://tlaja.blog.me/220716834999 )과 같은 의미가 된다.
-계산법
행렬 A를 (1)식을 통해(SVD)
————————-(1)
분해할 수 있다.
이때 구한 U,Σ,V를 가지고 pseudo inverse 를 (2)식과 같이 계산할 수 있다.
————————(2)
——————(3)
여기서 Σ+는 (3)식과 같이 원래 Σ 에서 0이 아닌 Singular value들의
역수를 취한 뒤 transpose시킨 행렬이다.
2)행렬근사(데이터 압축)
아래와 같이 mxn 행렬A 가 있고,(m > n)
s= Singular value 갯수
r= Singular value 중 0이 아닌 것들의 갯수라고 할 때
행렬A를 SVD로 분해하는것을 full SVD
Σ 행렬에서 대각파트가 아닌 0으로 구성된 부분을 없애고 U에서는 이에 대응되는 열벡터들을
제거한 형태를 Thin SVD
비대각 원소뿐 아니라 0인 Singular value들까지 모두 제거한 형태를 Compact SVD
비대각 원소, 0인 Singular Value뿐 아니라 0이 아닌 Singular value 까지 제거한 형태를 Truncated SVD
라고 한다.
Truncated SVD는 데이터 압축, 노이즈 제거 등에 활용될 수 있다.
Memo – Apps data-on Google Play It is an app that serves as a reminder through daily life memos and alarms. play.google.com
모든 내용은 아래 블로그를 통해 공부하였다.
http://darkpgmr.tistory.com/106
http://cafe.naver.com/opencv/23071
http://m.blog.naver.com/redpkzo/30176903857
http://rfriend.tistory.com/185
> # overall (aggregation) > > A # 4 by 2 rectacgular matrix [,1] [,2] [1,] 3 6 [2,] 2 3 [3,] 0 0 [4,] 0 0 > > U # eigenvectors of A*t(A) [,1] [,2] [,3] [,4] [1,] 0.8816746 -0.4718579 0 0 [2,] 0.4718579 0.8816746 0 0 [3,] 0.0000000 0.0000000 0 1 [4,] 0.0000000 0.0000000 1 0 > > S # square root of eigenvalues of t(A)*A [,1] [,2] [1,] 7.605551 0.0000000 [2,] 0.000000 0.3944487 [3,] 0.000000 0.0000000 [4,] 0.000000 0.0000000 > > V # eigenvectors of t(A)*A [,1] [,2] [1,] 0.4718579 -0.8816746 [2,] 0.8816746 0.4718579 > > SVD_of_A <- U %*% S %*% t(V) > SVD_of_A [,1] [,2] [1,] 3.328201 5.824352 [2,] 1.386750 3.328201 [3,] 0.000000 0.000000 [4,] 0.000000 0.000000