지난 시간까지 우리는 정방행렬을 분해하는 LU분해, QR분해와 그 분해의 도구인 GS process, Householder reflection에 대해 알아보았다.
이번엔 비정방행렬을 분해하는 몇 가지 방법을 간략하게 소개하고자 한다.
SVD
SVD(Singular Value Decomposition, 특이값 분해)는 어떤 행렬(A)을 두 정방행렬(U,V^T)과 한 대각행렬(∑)로 분해하는 과정을 의미한다.
이를 행렬로 나타내면 아래와 같다.
여기서 각 행렬을 부르는 용어를 짚고 넘어가보자.
U행렬과 V^T행렬은 각각 left singular vectors(U)와 right singular vectors(V^T)로, 직교행렬이다.
∑행렬의 경우 대각성분만이 존재하는 행렬인데, 이 대각성분들을 각각 일컬어 singular value(특이값)이라고 하며, 대각행렬 자체는 singular values라고 지칭한다.
이러한 SVD는 행렬의 차원을 축소하는데 많이 사용된다. 무슨 소리인가 하면, 행렬의 크기는 그대로 두면서 담고 싶은 정보만 압축하여 보존할 수 있다는 의미이다. 아래의 그림을 보자.
행렬곱의 특성상 크기는 유지되지만, 안에 담고 있는 정보는 압축된다.
위의 사진들에서 볼 수 있듯이, 원본을 압축할수록 용량이 줄어들기도 하지만 정보가 손실된다.
PCA
PCA(Principal Component Analysis, 주성분 분석)는 다양한 데이터들이 분포되어 있을 때 이 분포를 가장 잘 표현하는 두 개의 벡터를 찾는 방법이다. 아래의 분포와 두 화살표를 보자.
이 데이터들의 분산이 가장 큰 방향이 바로 e1벡터의 방향이고, e1벡터에 수직이며 두 번째로 큰 방향이 e2이다. 크기 또한 이 벡터들의 크기와 같고, 이 두 방향벡터가 바로 주성분 벡터이다. 만일 데이터의 종류가 더 많아 3차원, 4차원 데이터로 점점 늘어난다면, 이 주성분 벡터 또한 하나씩 증가한다.
이러한 PCA는 차원을 축소할 수 있다는 점에서 큰 의미를 가진다. 차원이 하나씩 늘어날수록 알고리즘이 복잡해져 성능이 크게 떨어지는 경우가 많은데, 이 "차원의 저주(curse of dimensionality)"를 피하기 위해 우리는 PCA를 사용할 수 있는 것이다.
그렇다면 굳이 분산이 최대가 되는 성분을 활용하는 이유가 무엇일까? 아래 사진을 보자.
세 가지 축이 있지만, 가장 큰 분산을 따르는 c1 축을 선택하는 것이 원본을 가장 잘 나타낸다(정보 손실이 가장 적다). 따라서 우리는 PCA를 통해 분산이 가장 큰 축을 찾고, 남은 분산을 가장 잘 표현하는 축 e2를 찾는 것이다.
ICA
위키피디아에 따르면, ICA(Independent Component Analysis, 독립성분분석)란 다변량의 신호를 통계적으로 독립적인 하부 성분으로 분리하는 계산 방법이다. 쉽게 설명하자면, 섞여있는 여러 정보들을 원래의 상태로 분리하는 방법이다.
간단한 원리는 중심 극한 정리와 비슷하다. 중심 극한 정리의 개념은 "서로 독립적인 랜덤 변수들이 섞이면 새로운 랜덤 변수는 가우스 분포(정규분포)를 따른다"인데, 이를 반대로 생각한 개념이 바로 ICA의 개념과 같다.
여러 사람이 떠들고 있을 때, 이 섞여있는 말소리를 본래의 신호로 분리하는 BSS(Blind Source Separation 또는 Blind Signal Separation) 문제가 바로 이러한 ICA기법의 가장 대표적인 예시이다.
'수치해석' 카테고리의 다른 글
방정식의 해 구하기 (0) | 2022.05.17 |
---|---|
QR decomposition, GS process, Householder reflection (0) | 2022.05.04 |
LU Decomposition (0) | 2022.04.22 |
행렬 - Transpose(전치), decomposition(분해), LU decomposition (0) | 2022.04.19 |
행렬 - linear transformation (0) | 2022.04.17 |