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=[λ−1−20−2λ−5−20−2λ−4]=λ(λ−3)(λ−7)=0
이므로 행렬 ˜A 의 고윳값은 7, 3, 0 이고,
특이값은 크기 순으로 σ1=√7 , σ2=√3 , σ3=0 입니다.
특이값을 구했다면 특이값을 주대각 성분으로 갖는 직사각 대각행렬 Σ 를 알 수 있습니다.
특이값이 3개 나왔으므로 Σ=[√7000√30000] 이렇게 생각하실 수도 있겠지만,
A가 2x3 행렬이므로 Σ 도 3x3 이 아닌, 2x3 행렬로 나옵니다.
따라서 마지막 특이값 0은 사용하지 않습니다.
Σ=[√7000√30]
이제 Σ 행렬은 구했고,
행렬 V를 구하기 위해 각 고윳값에 대응하는 고유벡터를 구해봅시다.
고유벡터 구하는 자세한 방법은 아래 글을 참고해주세요.
https://studywithsheep.tistory.com/71
λ1=7,x1=[12321] , λ2=3,x2=[−12−121] , λ3=0,x3=[4−21]
이제 각 고유벡터를 열로 갖는 직교행렬 V를 구할 것입니다.
하나 주의할 점은, 벡터 x1,x2,x3 를 바로 붙여넣는 게 아니라는 것입니다.
각 고유벡터를 정규화된 단위 벡터로 표현해야 V가 나옵니다.

구하는 방식은 다음과 같습니다.
고유 벡터의 모든 값을 각각 제곱해준 뒤 더해주고 루트를 씌워줍니다.
그 후에 그 값을 고유 벡터에 나누어 주면 됩니다.
나머지 x2,x3 도 이와 같이 연산을 해주면 V를 구할 수 있습니다.
V=[√1414−√664√21213√1414−√66−2√2121√147√63√2121]
마지막으로 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=[√22−√22√22√22]
이제 A=UΣVT 에 각각을 대입해주기만 하면 특이값 분해는 끝이납니다.
특이값 분해 결과 :
A=[120012] =[√22−√22√22√22] [√7000√30] [√1414−√664√21213√1414−√66−2√2121√147√63√2121]T