[행렬] SVD (Singular Value Decomposition, 특이값 분해)

·2024년 9월 5일
0
post-thumbnail

SVD(Singular Value Decomposition, 특이값 분해)는 다양한 데이터 분석, 이미지 처리, 정보 검색, 추천 시스템 등 많은 응용 분야에서 사용되고 있는 기법이다.

1. SVD

임의의 행렬 m×nm×n 행렬 AA를 세 개의 행렬 U,Σ,VU, Σ, V로 분해하는 방법이다.

A=UΣVTA=UΣV^T

  • UU : m×mm×m 직교 행렬(Orthogonal Matrix)로 AA의 열 공간(column space)을 설명하는 왼쪽 특이벡터들로 구성되어 있다.
  • ΣΣ : m×nm×n 대각 행렬(Digonal Matrix)로 AA의 특이값들이 대각선에 위치한다.
  • VTV^T : n×nn×n 직교 행렬(Orthogonal Matrix)로 AA의 행 공간(row space)을 설명하는 오른쪽 특이벡터들로 구성되어 있다.

세 행렬을 좌표 변환의 측면에서 해석하면, UUVTV^T는 회전 및 대칭을 나타내고 ΣΣ는 크기 조정을 나타낸다.

2. 변환과 PCA

2.1 행렬의 변환

임의의 행렬 AA는 벡터에 대해 스케일링, 회전 등의 선형 변환을 수행할 수 있다.
특이값 분해는 이 변환 과정을 세 가지 변환으로 나누어서 설명할 수 있다.

Ax=UΣVTxAx = UΣV^Tx

  1. VTV^T : 오른쪽 회전 or 반사
    • 데이터의 방향을 바꾼다.
  2. ΣΣ : 스케일링(크기 조정)
    • 각 특이값은 행렬 AA가 각 특이값에 매칭되는 특정 축을 따라서 데이터를 얼마나 늘리거나 줄이는지를 설명한다.
    • 이 단계에서 벡터의 길이(크기)가 변하면서 중요한 정보는 유지되고, 덜 중요한 정보는 탈락되는 선택의 기능을 보인다.
  3. UU : 왼쪽 회전 or 반사
    • 특이값에 의해 스케일링 된 벡터들을 새로운 공간으로 이동시킨다.

2.2 주성분 분석(PCA, Principal Component Analysis)

PCA의 목표

  • PCA는 데이터의 분산을 최대한 유지하면서 차원을 줄이는 것
  • 고차원 데이터를 저차원으로 투영해, 데이터의 중요한 패턴을 찾고 노이즈나 덜 중요한 정보를 제거하려는 것

SVD는 주성분 분석(PCA)와 매우 밀접하게 연결된 차원 축소 기법이다. 고차원 데이터를 중요한 정보만 남기고 차원을 줄이는 기법으로, 데이터의 주요 패턴을 파악하는 데 사용된다. SVD는 PCA를 수행하는 수학적 방법 중 하나이다.

SVD와 PCA의 관계

PCA는 다음과 같은 단계를 거쳐 수행한다.

  1. 데이터의 중심화 (Centering)
    데이터가 원점 주변에 분포하게 하여 데이터의 패턴을 분석할 수 있도록 각 차원의 평균을 0으로 맞춰주는 과정
  1. 공분산 행렬 계산
    공분산 행렬은 데이터가 어떻게 서로 상관되어 있는지 설명한다.
    공분산 행렬 : ATAA^TA 혹은 AATAA^T
  1. SVD 적용
    이 공분산 행렬에 SVD를 적용하여 특이값과 특이벡터를 구한다.
    - 특이값은 각 주성분(Principal Component)이 설명하는 데이터의 분산 정도를 나타내며, 특이벡터는 주성분 방향을 나타낸다.
    - 특이값이 큰 주성분이 데이터의 중요한 패턴을 설명하며, 특이값이 작은 주성분은 노이즈나 덜 중요한 정보일 가능성이 크다.
  1. 주성분 선택
    특이값이 큰 몇 개의 주성분을 선택한다.
    기존의 데이터가 m차원이었지만, 특이값이 큰 상위 n개의 주성분만을 선택하면 n차원으로 데이터의 차원을 줄일 수 있다.

직관적 이해

SVD의 역할 : SVD는 데이터의 중요한 패턴(주성분)을 찾고, 이 정보를 사용하여 데이터의 차원을 줄이는데 도움을 준다.

차원 축소의 의미 : 차원이 높은 데이터는 분석과 시각화가 어렵고, 계산 비용이 높기 때문에 SVD를 통해 데이터의 차원을 줄이면 더 간단하게 데이터를 다룰 수 있다.

데이터 압축과 노이즈 제거 : 특이값이 작은 주성분은 보통 데이터의 노이즈나 덜 중요한 정보를 나타낸다. 따라서 특이값이 작은 성분을 제거하면 데이터의 노이즈를 줄이면서 중요한 정보만 남길 수 있다.

3. SVD의 수학적 이해

3.1 행렬 AA의 고유값과 고유벡터

정방 행렬에만 적용이 가능한 고유값 분해와는 다르게, SVD는 모든 형태의 m×nm×n 행렬에 적용할 수 있다. 이 과정에서 행렬의 특이값(singular value)과 특이벡터(singular vector)가 도출된다.

3.2 특이값 분해 계산 단계

Step 1 : ATAA^TAAATAA^T의 계산
SVD의 첫 번째 단계는 다음 두 행렬을 계산하는 것이다.

  1. ATAA^TAn×nn×n 대칭 행렬이다.
  2. AATAA^Tm×mm×m 대칭 행렬이다.

이 두 행렬은 각각 AA의 오른쪽 고유벡터와 왼쪽 고유벡터를 찾는 데 사용된다.

Step 2 : 고유값 문제 해결

  • ATAA^TA의 고유값을 구한다. 이 고유값들은 특이값의 제곱이 된다.
  • ATAA^TA의 고유벡터는 VV의 열을 이루며, 이를 오른쪽 특이벡터라고 한다.
  • AATAA^T의 고유벡터는 UU의 열을 이루며, 이를 왼쪽 특이벡터라고 한다.

Step 3 : 특이값 계산
각 고유값의 제곱근이 AA의 특이값이 되고, ΣΣ행렬의 대각선에 배치된다.
특이값은 행렬 AA의 중요한 정보, 즉 데이터의 분산과 크기를 나타낸다.

Step 4 : U,Σ,VU, Σ, V 행렬 구성

  • UU : AATAA^T의 고유벡터를 이용해 구성한다.
  • ΣΣ : 특이값을 대각선에 배치한 행렬이다.
  • VV : ATAA^TA의 고유벡터를 이용해 구성한다.

4. SVD의 응용

4.1 차원 축소

SVD는 데이터의 차원을 축소하는 데 많이 사용된다. 예를 들어, 추천 시스템에서는 사용자와 아이템 간의 상호작용 행렬을 SVD로 분해하여 중요하지 않은 데이터를 제거하고, 중요한 패턴만을 남길 수 있다. 이렇게 하면 모델의 효율성과 성능을 개선할 수 있다.

4.2 데이터 압축

이미지 처리에서는 SVD를 사용하여 이미지를 압축할 수 있다. 이미지 데이터는 보통 큰 행렬로 표현되는데, 이를 SVD로 분해하고 중요 특이값만을 사용하여 이미지를 재구성함으로써 원본 이미지와 유사한 품질을 유지하면서도 파일 크기를 줄일 수 있다.

4.3 노이즈 제거

SVD는 데이터를 노이즈와 신호로 분리하는 데 유용하다. 중요하지 않은 특이값(노이즈)을 제거하고 나머지 신호를 사용하여 더 깨끗한 데이터를 얻을 수 있다.

5. SVD의 장점과 한계

장점

  • 모든 행렬에 적용 가능 : 정방 행렬뿐만 아니라 모든 차원의 행렬에 대해 SVD를 사용할 수 있다.
  • 차원 축소와 압축 : 중요한 정보를 추출해 차원을 축소할 수 있다.
  • 수치적 안정성 : SVD는 매우 안정적인 수치적 기법으로, 대부분의 경우 수치 계산에서 매우 정확한 결과를 제공한다.

한계

  • 계산 복잡성 : 큰 행렬에 대해서는 SVD의 계산이 매우 복잡하고 시간이 오래 걸릴 수 있다.
  • 실시간 응용의 제한: 실시간으로 대규모 데이터를 처리해야 하는 경우 SVD는 적합하지 않을 수 있다.
profile
납작복숭아 먹고 싶어요

0개의 댓글