Processing math: 100%

특이값 분해 - 간단한 예제

2024. 10. 22. 01:55카테고리 없음

 

특이값 분해는 주어진 행렬을 분해하는 방법 중 하나입니다.

m x n 행렬을 직교행렬과 고윳값으로 이루어진 행렬의 곱으로 나타내는 방법이라 할 수 있죠.

 

여기서 특잇값이란, σ 기호로 표기하고 고윳값인 λ 에 대한 양의 제곱근과 같습니다.

 

σ=λ 

 

아래는 특이값 분해 공식입니다.

 

A=UΣVT 

 

하나씩 뜯어보도록 하겠습니다.

 

 

A는 m x n 의 실수행렬이고

 

U는 행렬 AAT 의 고유벡터를 열로 갖는 직교행렬,

 

Σ 는 행렬 A의 특잇값을 주대각 성분으로 갖는 직사각 대각행렬

 

V는 행렬 AAT  의 고유벡터를 열로 갖는 직교 행렬입니다. 

 

 

 

대충 이해가 되셨다면 간단한 예제를 이용해 특이값 분해 과정을 보여드리겠습니다.

 

 

행렬 A=[120012] 를 특이값 분해하라

 

 

 

먼저, 특이값은 고윳값의 양의 제곱근이기 때문에 고윳값을 먼저 구해 특이값을 얻어야 합니다.

 

고윳값을 구하기 위해서는 n x n 꼴인 정방행렬이 되어야 하므로 

 

ATA 를 하여 ˜A 꼴로 만들어줍니다. (AAT=˜A)

 

 

AAT=[102102][120012]=[120252024]

 

 

이제 이 행렬로 고윳값을 구해주면, 

 

λI˜A=[λ1202λ5202λ4]=λ(λ3)(λ7)=0

 

 

이므로 행렬 ˜A 의 고윳값은 7, 3, 0 이고, 

 

특이값은 크기 순으로 σ1=7 , σ2=3 , σ3=0 입니다. 

 

특이값을 구했다면 특이값을 주대각 성분으로 갖는 직사각 대각행렬 Σ 를 알 수 있습니다.

 

특이값이 3개 나왔으므로 Σ=[700030000] 이렇게 생각하실 수도 있겠지만, 

 

A가 2x3 행렬이므로 Σ 도 3x3 이 아닌, 2x3 행렬로 나옵니다.

 

따라서 마지막 특이값 0은 사용하지 않습니다.

 

Σ=[700030]

 

이제 Σ 행렬은 구했고,

 

 

행렬 V를 구하기 위해 각 고윳값에 대응하는 고유벡터를 구해봅시다. 

 

고유벡터 구하는 자세한 방법은 아래 글을 참고해주세요.

https://studywithsheep.tistory.com/71

 

λ1=7,x1=[12321]   ,   λ2=3,x2=[12121]   ,   λ3=0,x3=[421]

 

 

이제 각 고유벡터를 열로 갖는 직교행렬 V를 구할 것입니다.

 

하나 주의할 점은, 벡터 x1,x2,x3 를 바로 붙여넣는 게 아니라는 것입니다.

 

각 고유벡터를 정규화된 단위 벡터로 표현해야 V가 나옵니다. 

 

 

 

구하는 방식은 다음과 같습니다. 

 

고유 벡터의 모든 값을 각각 제곱해준 뒤 더해주고 루트를 씌워줍니다.

 

그 후에 그 값을 고유 벡터에 나누어 주면 됩니다. 

 

 

나머지 x2,x3 도 이와 같이 연산을 해주면 V를 구할 수 있습니다.

 

V=[14146642121314146622121147632121] 

 

 

 

마지막으로 U를 구해보겠습니다. 

 

U는

 

ui=1σi[120012]vi 

 

이렇게 구하라는 곳도 꽤 있지만, 

 

사실 V를 구한 방식대로 구할 수 있습니다. 

 

V와 U에 대한 설명을 보면,

 

V는 A행렬 x A 전치행렬의 고유벡터를 열로 갖는 직교행렬,

 

U는 A 전치행렬 x A행렬의 고유벡터를 열로 갖는 직교행렬로

 

곱셈의 순서밖에 차이가 없습니다. 

 

따라서, 

 

이번에는 A전치행렬 x A행렬을 해준 

 

ATA=[5225] 를 이용합니다. 

 

고윳값은 7, 3이 나온다는 걸 금방 구할 수 있고 

 

고유 벡터는 

 

고윳값이 7일 땐 [11] , 3일 땐 [11] 이 나온다는 것도 구할 수 있습니다.

 

 

이를 이용해 정규화된 단위벡터로 만들어주면 , 

이런 식으로 나와서 U도 아래와 같이 구했습니다. 

 

U=[22222222] 

 

 

이제 A=UΣVT 에 각각을 대입해주기만 하면 특이값 분해는 끝이납니다. 

 

특이값 분해 결과 : 

 

A=[120012] =[22222222] [700030] [14146642121314146622121147632121]T