특이값 분해
특이값 분해 (Singular Value Decomposition, SVD)
특이값 분해란?
중학교 수학에서 배운 소인수 분해를 생각해 보자.
30을 소인수분해한다면? 30 = 235로 진행된다.
즉, 복잡한 수(30)를 그 수를 구성하는 기본적인 블록(소수 2,3,5)으로 분해.
행렬에도 이와 비슷한 과정이 있다.
- 복잡한 행렬 A(m*n)을 더 간단한 세가지 행렬(U, Σ, Vt)로 분해.
- A=UΣVt
- U의 열 벡터들은 A의 왼쪽 특이 벡터로 A*At의 고유벡터 들로 이루어짐
- V의 열 벡터들은 A의 오른쪽 특이 벡터로 At*A의 고유벡터 들로 이루어짐
- Σ의 대각선 위의 값들로 A의 특이값
- 이런 [하나의 행렬]을 [세가지의 행렬]로 분해하는 과정을 특이값 분해(SVD)라고 한다.
“고유벡터와 고유값” 그리고 SVD의 관계
고유벡터와 고유값은 특정 행렬 A에서 정보를 뽑아내는 과정
- 하지만 고유벡터와 고유값 분석은 행렬 A가 정사각 행렬일 경우에 사용 가능
- 반면, SVD는 직사각 행렬 A에 대해 사용 가능
따라서 SVD가 조금 더 일반적인 경우를 나타내며,
고유벡터와 고유값은 SVD의 스페셜 케이스로 보면 됨.

AAt는 무슨 의미인가요?
- A 행렬의 크기가 (m*n) 이라고 할 때,
정사각 행렬이 아니므로 바로 고유벡터와 고유값 분석을 할 수 없다.
- 따라서 행렬 A에서 행과 열 방향으로 따로 나눠서 봐야 됨.
행 사이의 관계를 따로!
열사이의 관계를 따로! 보고자 했다.
그래서 고안을 한 것이 바로 제곱을해서 정사각 행렬을 만들어버린 것! A*At!
Σ는 무슨 의미인가요?
AAt 혹은 AtA의 고유값의 제곱근 값을 A의 특이값이라고 함.
AAt, AtA는 제곱을 해서 U랑 V를 나타낸 것이기 때문에 가운데에 제곱근 값을 표시해주는 Σ를 넣는 형식!
- Σ행렬은 A의 특이값을 대각선 위치에 갖고 있고
대각선을 제외한 나머지 모든 값은 0이 된다.
- 고유값 분석과 마찬가지로
행렬 A의 선형 변환에서 중요한 스케일링 정보를 포함하고 있다.
정리!
m × n 크기를 갖는 직사각 행렬 A는
A = UΣVt
- U(왼쪽 특이 벡터들)
- 크기 : m*m
- 원본 행렬 A의 행 정보를 바탕으로 중요도를 파악
- V(오른쪽 특이 벡터들)
- 크기 : n*n
- 원본 행렬 A의 열 정보를 바탕으로 중요도를 파악
- Σ(특이값들)
- 크기 : m*n
- 행렬 A 선형 변환 과정에서 영향을 미치는 스케일링 정보(중요도)를 포함.
특이값이 크면 해당 방향(특이벡터)이 중요하다고 볼 수 있다.
특이값 분해는 하나의 행렬을 특이값과 특이벡터들의 곱으로 분해하는 것이다.
이를 통해 데이터의 구조와 중요한 부분을 이해하고 압축하는 데 사용될 수 있다.