SVD(Singular Value Decomposition, 특이값 분해)는 다양한 데이터 분석, 이미지 처리, 정보 검색, 추천 시스템 등 많은 응용 분야에서 사용되고 있는 기법이다.
임의의 행렬 행렬 를 세 개의 행렬 로 분해하는 방법이다.
- : 직교 행렬(Orthogonal Matrix)로 의 열 공간(column space)을 설명하는 왼쪽 특이벡터들로 구성되어 있다.
- : 대각 행렬(Digonal Matrix)로 의 특이값들이 대각선에 위치한다.
- : 직교 행렬(Orthogonal Matrix)로 의 행 공간(row space)을 설명하는 오른쪽 특이벡터들로 구성되어 있다.
세 행렬을 좌표 변환의 측면에서 해석하면, 와 는 회전 및 대칭을 나타내고 는 크기 조정을 나타낸다.
임의의 행렬 는 벡터에 대해 스케일링, 회전 등의 선형 변환을 수행할 수 있다.
특이값 분해는 이 변환 과정을 세 가지 변환으로 나누어서 설명할 수 있다.
- : 오른쪽 회전 or 반사
- 데이터의 방향을 바꾼다.
- : 스케일링(크기 조정)
- 각 특이값은 행렬 가 각 특이값에 매칭되는 특정 축을 따라서 데이터를 얼마나 늘리거나 줄이는지를 설명한다.
- 이 단계에서 벡터의 길이(크기)가 변하면서 중요한 정보는 유지되고, 덜 중요한 정보는 탈락되는 선택의 기능을 보인다.
- : 왼쪽 회전 or 반사
- 특이값에 의해 스케일링 된 벡터들을 새로운 공간으로 이동시킨다.
PCA의 목표
- PCA는 데이터의 분산을 최대한 유지하면서 차원을 줄이는 것
- 고차원 데이터를 저차원으로 투영해, 데이터의 중요한 패턴을 찾고 노이즈나 덜 중요한 정보를 제거하려는 것
SVD는 주성분 분석(PCA)와 매우 밀접하게 연결된 차원 축소 기법이다. 고차원 데이터를 중요한 정보만 남기고 차원을 줄이는 기법으로, 데이터의 주요 패턴을 파악하는 데 사용된다. SVD는 PCA를 수행하는 수학적 방법 중 하나이다.
PCA는 다음과 같은 단계를 거쳐 수행한다.
- 데이터의 중심화 (Centering)
데이터가 원점 주변에 분포하게 하여 데이터의 패턴을 분석할 수 있도록 각 차원의 평균을 0으로 맞춰주는 과정
- 공분산 행렬 계산
공분산 행렬은 데이터가 어떻게 서로 상관되어 있는지 설명한다.
공분산 행렬 : 혹은
- SVD 적용
이 공분산 행렬에 SVD를 적용하여 특이값과 특이벡터를 구한다.
- 특이값은 각 주성분(Principal Component)이 설명하는 데이터의 분산 정도를 나타내며, 특이벡터는 주성분 방향을 나타낸다.
- 특이값이 큰 주성분이 데이터의 중요한 패턴을 설명하며, 특이값이 작은 주성분은 노이즈나 덜 중요한 정보일 가능성이 크다.
- 주성분 선택
특이값이 큰 몇 개의 주성분을 선택한다.
기존의 데이터가 m차원이었지만, 특이값이 큰 상위 n개의 주성분만을 선택하면 n차원으로 데이터의 차원을 줄일 수 있다.
SVD의 역할 : SVD는 데이터의 중요한 패턴(주성분)을 찾고, 이 정보를 사용하여 데이터의 차원을 줄이는데 도움을 준다.
차원 축소의 의미 : 차원이 높은 데이터는 분석과 시각화가 어렵고, 계산 비용이 높기 때문에 SVD를 통해 데이터의 차원을 줄이면 더 간단하게 데이터를 다룰 수 있다.
데이터 압축과 노이즈 제거 : 특이값이 작은 주성분은 보통 데이터의 노이즈나 덜 중요한 정보를 나타낸다. 따라서 특이값이 작은 성분을 제거하면 데이터의 노이즈를 줄이면서 중요한 정보만 남길 수 있다.
정방 행렬에만 적용이 가능한 고유값 분해와는 다르게, SVD는 모든 형태의 행렬에 적용할 수 있다. 이 과정에서 행렬의 특이값(singular value)과 특이벡터(singular vector)가 도출된다.
Step 1 : 와 의 계산
SVD의 첫 번째 단계는 다음 두 행렬을 계산하는 것이다.
- 는 대칭 행렬이다.
- 는 대칭 행렬이다.
이 두 행렬은 각각 의 오른쪽 고유벡터와 왼쪽 고유벡터를 찾는 데 사용된다.
Step 2 : 고유값 문제 해결
- 의 고유값을 구한다. 이 고유값들은 특이값의 제곱이 된다.
- 의 고유벡터는 의 열을 이루며, 이를 오른쪽 특이벡터라고 한다.
- 의 고유벡터는 의 열을 이루며, 이를 왼쪽 특이벡터라고 한다.
Step 3 : 특이값 계산
각 고유값의 제곱근이 의 특이값이 되고, 행렬의 대각선에 배치된다.
특이값은 행렬 의 중요한 정보, 즉 데이터의 분산과 크기를 나타낸다.
Step 4 : 행렬 구성
- : 의 고유벡터를 이용해 구성한다.
- : 특이값을 대각선에 배치한 행렬이다.
- : 의 고유벡터를 이용해 구성한다.
SVD는 데이터의 차원을 축소하는 데 많이 사용된다. 예를 들어, 추천 시스템에서는 사용자와 아이템 간의 상호작용 행렬을 SVD로 분해하여 중요하지 않은 데이터를 제거하고, 중요한 패턴만을 남길 수 있다. 이렇게 하면 모델의 효율성과 성능을 개선할 수 있다.
이미지 처리에서는 SVD를 사용하여 이미지를 압축할 수 있다. 이미지 데이터는 보통 큰 행렬로 표현되는데, 이를 SVD로 분해하고 중요 특이값만을 사용하여 이미지를 재구성함으로써 원본 이미지와 유사한 품질을 유지하면서도 파일 크기를 줄일 수 있다.
SVD는 데이터를 노이즈와 신호로 분리하는 데 유용하다. 중요하지 않은 특이값(노이즈)을 제거하고 나머지 신호를 사용하여 더 깨끗한 데이터를 얻을 수 있다.
장점
- 모든 행렬에 적용 가능 : 정방 행렬뿐만 아니라 모든 차원의 행렬에 대해 SVD를 사용할 수 있다.
- 차원 축소와 압축 : 중요한 정보를 추출해 차원을 축소할 수 있다.
- 수치적 안정성 : SVD는 매우 안정적인 수치적 기법으로, 대부분의 경우 수치 계산에서 매우 정확한 결과를 제공한다.
한계
- 계산 복잡성 : 큰 행렬에 대해서는 SVD의 계산이 매우 복잡하고 시간이 오래 걸릴 수 있다.
- 실시간 응용의 제한: 실시간으로 대규모 데이터를 처리해야 하는 경우 SVD는 적합하지 않을 수 있다.