open:svd

특이값 분해(Singular Value Decomposition, SVD)


행렬 U와 V에 속한 열벡터는 특이 벡터(Singular Vector)라 불리고 이 특이 벡터들은 서로 직교하는 성질을 가지고 있습니다.

또한 가운데 시그마 모양(∑)을 가지고 있는 것도 행렬인데요.
이 행렬은 대각 행렬(Diagonal Matrix) 성질을 가지고 있습니다.
그래서 대각 성분이 행렬 A의 특이값이고 나머지는 0의 값을 가지고 있습니다.

저렇게 특이값으로 쪼개진 데이터를 U, ∑, Vt를 각각 행렬곱을 하면 원래 행렬 A로 되돌릴 수 있습니다.

파이썬 사이킷런(Python scikit learn)에서 제공해주는 TruncateSVD는 이러한 SVD의 변형입니다.
TruncatedSVD는 시그마 행렬(∑)의 대각원소(특이값) 가운데 상위 n개만 골라낸 것입니다.

이렇게 하면 기존 행렬 A의 성질을 100% 원복할 수 없지만 (그 만큼 데이터 정보를 압축했기 때문)
행렬 A와 거의 근사한 값이 나오게 됩니다.


SVD란 A가 m x n 행렬일 때, 다음과 같이 3개의 행렬의 곱으로 분해(decomposition)하는 것을 말합니다.

$$ A =U\Sigma V^{T} $$

여기서 각 3개의 행렬은 다음과 같은 조건을 만족합니다.

$$ U:m×m 직교행렬 (AA^T=U(ΣΣ^T)U^T) \\ V:n×n 직교행렬 (A^TA=V(Σ^TΣ)V^T) \\ Σ:m×n 직사각 대각행렬 $$


  • open/svd.txt
  • 마지막으로 수정됨: 2020/11/02 10:21
  • 저자 127.0.0.1