TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 - 수학 | 통계학>

[개발자를 위한 수학] 선형대수학: 고유 벡터와 고윳값

by 기록자_Recordian 2024. 10. 7.
728x90
반응형
이전 내용
 

[개발자를 위한 수학] 선형대수학: 연립 방정식과 역행렬

이전 내용 [개발자를 위한 수학] 선형대수학: 행렬이전 내용  [개발자를 위한 수학] 선형대수학: 벡터, 선형변환선형대수학 선형대수학(linear algebra): 벡터 공간, 벡터, 선형 변환, 행렬, 연

puppy-foot-it.tistory.com


고유 벡터와 고윳값

 

◆행렬 분해(matrix decomposition)

인수 분해처럼 행렬을 기본 구성 요소로 분해하는 것. (인수 분해의 예. 10을 2 * 5로 인수 분해)

행렬 분해는 선형 회귀, 역행렬 찾기, 행렬식 계산과 같은 작업에 유용하며, 행렬을 분해하는 방법은 작업에 따라 여러 가지가 있다.

그 중 머신러닝과 주성분 분석(PCA, principal component analysis)에 자주 사용되는 고윳값 분해(eigen decomposition)이라는 방법이 있다. 이는 다양한 머신러닝 작업에서 행렬을 다루기 쉬운 구성 요소로 분할하는데, 정방 행렬에서만 작동한다.

 

정방 행렬 A가 있다면 다음과 같은 고윳값 방정식을 갖는다.

 

Av=λv(3.3.1)

 

원본 행렬 A는 고유 벡터 v와 고윳값 λ으로 구성된다. 원본 행렬의 각 차원마다 고유 벡터와 고윳값이 하나씩 존재한다.

모든 행렬이 고유 벡터와 고윳값으로 분해될 수 있는 것은 아니며, 때로는 복소수(허수)가 나오기도 한다.

 

[넘파이로 행렬 A의 고유 벡터와 고윳값 계산]

# 넘파이로 행렬 A의 고유 벡터와 고윳값 계산
from numpy.linalg import eig, inv
from numpy import array, diag

A = array([
    [1, 2],
    [4, 5]
])

eigenvals, eigenvecs = eig(A)

print('고윳값')
print(eigenvals)
print('\n고유 벡터')
print(eigenvecs)

 

고유 벡터와 고윳값으로 행렬 A를 재구성하려면 공식을 조금 수정해야 한다.

대각 행렬로 표현되었다는 것은 벡터가 0의 행렬에 더해져 항등 행렬과 유사한 형태로 대각선 원소에만 값이 들어 있다는 의미이다.

 

[넘파이에서 행렬 분해 및 재구성하기]

# 넘파이로 행렬 A의 고유 벡터와 고윳값 계산
from numpy.linalg import eig, inv
from numpy import array, diag

A = array([
    [1, 2],
    [4, 5]
])

eigenvals, eigenvecs = eig(A)

print('고윳값')
print(eigenvals)
print('\n고유 벡터')
print(eigenvecs)

# 넘파이에서 행렬 분해 및 재구성하기
print('\n 재구성 행렬')
Q = eigenvecs
R = inv(Q)

L = diag(eigenvals)
B = Q @ L @ R
print(B)


[출처]

개발자를 위한 필수 수학

위키백과

728x90
반응형