누누와데이터

차원축소 2 : SVD 개념과 sklearn적용 본문

머신러닝

차원축소 2 : SVD 개념과 sklearn적용

happynunu 2021. 6. 29. 13:25

SVD (Singular Value Decomposition) 공식

 

SVD 역시 PCA와 유사항 행렬 분해 기법을 이용한다. 하지만. PCA의 경우, 정방행렬(행과 열의 크기가 같은 행렬)만을 고유벡터로 분해할 수 있지만, SVD는 정방행렬뿐만 아니라, 행과 열의 크기가 다른 행렬에도 적용할 수 있다.

위의 그림에서, 행렬 U와 V에 속한 벡터는 특이벡터(singular vector)이다. 특히 U에 속한 벡터를 Left Singular Vector, V에 속한 벡터를 Right Singular Vector라고 한다.

모든 특이벡터는 서로 직교하는(orthogonal) 성질을 가진다. 위의 식에서 U와 V의 가운데에 있는 diagonal은 대각행렬이며, 대각행렬은 행렬의 대각에 위치한 값만 0이 아니고 나머지 위치의 값은 모두 0이다. 여기서 diagonal에서 행렬의 대각에 위치한 값이 바로 행렬 A의 특이값이다.

 

 

SVD (Singular Value Decomposition) 그림

출처 : Wikipedia (Singular value decomposition)

SVD는 A의 차원이 m x n일 때, U의 차원이 m x m, diagonal 행렬의 차원이 m x n V의 T 차원이 n x n 으로 분해된다. 특이벡터 U와 V는 Orthogonal 하기 때문에, 각각의  전치행렬(transpose matrix)을 곱하면, 단위행렬(identity matrix)가 나온다.  또한 직교행렬의 역행렬은 직교행렬은 전치행렬이다. 

 

대칭 행렬은 모두 고유값 분해가 가능하며, 더군다나 직교 행렬로 분해할 수 있습니다. AAt와 AtA는 모두 대칭 행렬이므로 고유값 분해가 가능합니다. AAt = U ( ∑t) Ut 로 분해할 수 있습니다. (증명은 아래 사진 참고) 다시 말해 (∑ ∑t)의 대각 원소 값은 AAt의 고유값(eigen value)이며, U는 AAt의 고유 벡터들로 구성된 행렬입니다. 마찬가지로 V는 AtA를 고유값 분해해서 얻은 행렬입니다. (∑t ∑)의 대각 원소 값은 AtA의 고유값(eigen value)이며, V는 AtA의 고유 벡터들로 구성된 행렬입니다.

(https://bkshin.tistory.com/entry/머신러닝-20-특이값-분해Singular-Value-Decomposition)

 

Latent Factor

VD는 차원축소를 통한 행렬 분해를 통해 Latent Factor를 찾을 수 있는데, 이렇게 찾아진, Latent Factor는 많은 분야에 활용된다.  SVD로 차원 축소 행렬이 분해된 후, 다시 분해된 행렬을 이용하여, 복원된 데이터셋은 잡음이 제거된 형태로 재구성할 수 있다.

 

sklearn 적용 및 활용

a행렬에 numpy의 SVD를 적용해, U,Sigma,Vt를 도출할 수 있다. SVD 분해는 numpy.linalg.svd에 파라미터로 원본 행렬을 입력하면, U행렬, Sigma행렬, V의 전치행렬을 반환한다. 이러한 방식은 A 행렬의 모든 원소를 포함하는 Full SVD 방식이다. 

Sigma의 경우 0이 아닌 값만 1차원으로 추출했으므로 다시 0을 포함한 대칭행렬로 변환한 뒤에 내적을 수행해야 한다.

Truncated SVD는 numpy가 아닌 scipy에서만 지원된다.

 

 

참고

-'파이썬 머신러닝 완벽가이드' 권철민 

-머신러닝 20. 특이값 분해 : https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-20-%ED%8A%B9%EC%9D%B4%EA%B0%92-%EB%B6%84%ED%95%B4Singular-Value-Decomposition

'머신러닝' 카테고리의 다른 글

차원축소 1 : PCA 개념과 sklearn적용  (0) 2021.06.28
Comments