[선형대수학] 특이값 분해 (SVD, Singular Value Decomposition)
-
728x90
데이터 과학은 SVD에서 선형대수학과 연결된다. - 딥러닝을 위한 선형대수학, 길버트 스트랭 저
이전 포스팅에서 고유값 분해에 대해 알아보았다. 하지만 우리가 대부분 다루게 될 행렬은 정사각행렬이 아닌 경우가 많을 것이다. 그렇다면 어떻게 해야할까?
특이값 분해(SVD, Singular Value Decomposition)
정사각 행렬을 대상으로 하는 고유값 분해를 mXn행렬로 일반화한 것을 특이값 분해라고 한다.
수식으로는
$$A = U\Sigma V^T$$
으로 표현한다.
특이값 분해는 행렬의 차원 축소를 위한 도구로 주로 사용하며, 최소제곱(least squares)에서 최적의 $\hat{a}$ 를 찾고, PCA에서 주성분인 $v_1$를 계산하는 것은 데이터 fitting의 대수적 문제이다.
행렬 M의 크기가 $m \times n$이라는 말은 n차원에서 m개의 점이 있다고 생각 가능하다. M에 대한 차원 축소란 m개의 점으로 표현할 수 있는 n보다 작은 차원의 부분공간을 찾는 문제라고 할 수 있는데 이때 데이터와 부분공간의 수직거리를 최소화한다. 이때 최소제곱을 사용해 구하게 된다.
특이값분해의 대표적인 식에서는 벡터 U와 V라는 집합이 필요한데 $m \times n$ 실수 행렬이 있을 때 n개의 우특이벡터 $v_1, ... , v_n$은 %R^n%에서 직교이다. m개의 좌특이벡터 $u_1, ... u_m$ 역시 %R^m%에서 직교이다. 위 벡터들은 이전 고유값 분해에서의 $Av = \lambda x$의 관계를 만족하지 않는다. 특이벡터에서는 $Av = \sigma x$의 관계를 만족해야한다.
적정 비율의 차원(k)을 선택하여 연산량을 줄일 수 있다. 특이값들 중에서 0인 것들을 제외하고 SVD를 진행하는 것을 reduced SVD라고 한다. 위에 행렬에서 0을 제외하는 SVD를 의미한다.
Truncated SVD
특잇값 가운데 가장 큰(가장 중요한) t개만 남기고 해당 특잇값에 대응되는 특이행렬(singular vector) 로 행렬 A를 근사(approximate)한 것이다. 이를 사용하게 될 경우 원본 행렬을 정확하게복원할 수는 없지만 근사할 수 있다. 추천 시스템의 랭킹, NLP의 잠재의미분석에서 주로 사용된다.
$\Sigma$의 대각원소 중에 상위 몇개만 추출해서 여기에 대응하는 U와 V의 원소도 함께 제거한다.