본문 바로가기
Statistics/Linear Algebra

선형대수 - 고유값분해~특이값분해SVD

by bents 2021. 2. 24.

모든 데이터분석의 근원같은 개념: 고유값 분해

 

SVD(특이값분해),

Pseudo-Inverse,

선형연립방정식의 풀이,

PCA(주성분분석) 등

주요 응용이 eigenvalue, eigenvector를 그 밑바탕에 깔고 있기 때문

Eigenvalue, Eigenvector이 뭐길래?

정방행렬 * 고유벡터 = 고유값 * 고유벡터

- 고유벡터(eigenvector) : 선형변환 A에 의한 변환 결과가 자기 자신의 상수배가 되는 0이 아닌 벡터

- 고유값(eigenvalue) : 상수배 값

 

고유벡터/고유값은 정방행렬(square matrix)에서만 존재한다.

단, 고유벡터/고유값은 최소 0개부터 최대 n개까지 존재할 수 있다.

고유값과 고유벡터가 왜 중요한가?

1. 고유벡터가 중요한 이유

: 변화하는 방향이 일정하다면, 해당 방향으로 변하는 모든 움직임은 상수배로 설명가능하다.

2. 왜 고유값이 중요한가?

- 고유값은 성질의 대표값이면서 변하지 않는 유일한 값이다. 반면 고유벡터는 상수배를 곱하면 수도 없이 많아질 수 있다. 

- 고유값은 벡터가 서로 독립이어야 생긴다. 즉, 상수배나 선형결합으로 설명된다면 고유값도 고유벡터도 생길 수 없다.

따라서 행렬(정보)를 가장 핵심적으로 설명하는 변수를 찾는데 도움이 되고, 얼만큼의 정보량을 가지고 있는지 보여준다

고유값분해는 뭔가?

정방행렬 * 고유벡터행렬 = 고유값행렬 * 고유벡터행렬

고유벡터를 고유벡터행렬로 확장해 생각해보자. 정방행렬에 고유벡터행렬을 곱해서 고유값행렬과 고유벡터행렬의 곱으로 만들 수 있다.

고유값분해(Decompositin) : 고유벡터행렬을 곱해서 고유값행렬(고유값 이외엔 0인 대각행렬)을 만드는 과정

*대각화(Diagonalization)이라고도 한다.

그렇게 고유값이 중요하다면, 약간의 변형으로 고유값을 항상 뽑아낼 수 없을까?

항상 n개의 고유값을 가지는 행렬대칭행렬 symmetric matrix이다.

즉, 모든 고유벡터서로 독립이기 때문에 고유값의 개수가 N개 되어 고유벡터행렬이 직교행렬(orthogonal)이 된다.

고유값행렬은 모든 고유값이 채워져 있는 대각행렬이 된다.

 

--> 대칭행렬의 성질을 잘 활용하면 모든 행렬에 대해서 고유값분해를 할 수 있겠다는 생각이 들지 않는가? 

--> 그래서 등장한 것이 특이값분해와 주성분분석이다. 


좋다, 대칭행렬을 만들어서 고유값행렬을 만들어보자. - 특이값분해

어떤 행렬이든 Transpose해서 자기자신과 곱하면 대칭행렬이 된다.

이 대칭행렬에 대해서 고유값분해를 하면 고유벡터행렬과 고유값행렬이 나온다.

But 행렬곱셈은 교환법칙이 성립하지 않는다.

따라서 Transpose matrix를 left/right 어느 방향으로 곱했는지에 따라 고유벡터행렬이 다르다.

그러면 고유값행렬도 다를까? 고유값은 똑같지만 고유값행렬의 크기는 다르다.

즉, 고유값행렬을 Transpose하면 다른 고유벡터행렬로 만들어진 고유값행렬과 똑같아진다. 

 

동일한 행렬을

--> 좌측곱셈 고유벡터행렬과 sqrt(고유값행렬) 의 곱

--> 우측곱셈 고유벡터행렬과 sqrt(고유값행렬) 의 곱

으로 포현할 수 있다.

 

이를 합하면 행렬을

원래 행렬 왼쪽에 전치행렬을 곱한 고유벡터행렬(직교행렬)

원래 행렬 오른쪽에 전치행렬을 곱한 고유벡터행렬(직교행렬)

직사각형모양의 고유값행렬(대각행렬)

으로 분해해서 표현할 수 있다.

 

 

 

* 고유벡터행렬은 원래 행렬을 회전시키고, 고유값은 scale을 변형시킨다.

* Reduced SVD :  고유값행렬 중 고유값이 존재하는 벡터만 추려서 만든 행렬로 분해하는 SVD 축소버전이다. 

용어에 대한 주의사항

이해했지? 특이값분해 어려운 개념아니다. 

단, 용어사용에 주의하자.

Singular matrix : 고유값이 n이 아닌 squre matrix / 정방행렬에서만 singular이 사용가능함.

Pseudo inverse가 무엇이고 , 왜 필요한가?

현실적으로 대부분의 행렬이 정방행렬이 아니고 , 모두 고유값을 n개 가지지 않는다.

그러면 역행렬을 구할수 없다. 하지만 우리는 역행렬이 필요하다. 그래야 선형 방정식의 해를 구할 수 있다.

고유값을 얻기 위해 SVD를 했듯, 이를 활용해서 우회하는 방법으로 역행렬을 구하는 방식이다.

 

 

 

source : darkpgmr.tistory.com/105