심드렁하게 저장

고유값(Eigenvalue)과 고유벡터(Eigenvector), 고유값 분해(Eigen Decomposition) 본문

Artificial intelligence/AI Fundamental

고유값(Eigenvalue)과 고유벡터(Eigenvector), 고유값 분해(Eigen Decomposition)

Ggoosae 2025. 3. 3. 22:44

1. 고유값(Eigenvalue)과 고유벡터(Eigenvector)

고유값과 고유벡터란?

행렬 A 가 있을 때, 어떤 벡터 v 에 대해 방향은 변하지 않고 크기만 변하는 경우가 존재한다면, 이 벡터를 고유벡터(Eigenvector), 변하는 크기를 고유값(Eigenvalue) 이라고 한다.

즉, 아래 수식을 만족하는 λ\lambdaλ (고유값)과 vvv (고유벡터) 를 찾는 것이 목표이다.

고유값과 고유벡터 수식

  • A: 정방행렬 (n x n 행렬)
  • v: 고유 벡터(0이 아닌 벡터)
  • lambda : 고유값 (스칼라 값)

고유값과 고유벡터의 의미

  • 고유벡터(Eigenvector): 행렬 변환(선형 변환)에서 방향이 유지되는 벡터.
  • 고유값(Eigenvalue): 해당 고유벡터가 늘어나는(혹은 줄어드는) 정도를 나타냄.

행렬의 고유값과 고유벡터 구하기 (Python)

import numpy as np

# 행렬 A 정의
A = np.array([[3, 1], [0, 2]])

# 고유값과 고유벡터 계산
eigenvalues, eigenvectors = np.linalg.eig(A)

print("고유값(Eigenvalues):", eigenvalues)
print("고유벡터(Eigenvectors):\n", eigenvectors)
고유값(Eigenvalues): [3. 2.]
고유벡터(Eigenvectors):
 [[ 1.         -0.70710678]
 [ 0.          0.70710678]]

2. 고유값 분해 (Eigen Decomposition)

고유값 분해란?

정방행렬 A 가 고유값과 고유벡터를 가지면, 다음과 같이 행렬을 분해할 수 있다.

  • V : 고유벡터 행렬 (각 고유벡터를 열 벡터로 나열한 행렬)
  • lambda : 대각 행렬, 대각선 원소가 행렬 AAA 의 고유값
  • V.pow(-1) : 고유벡터 행렬의 역행렬

즉, 고유값 분해는 행렬을 "고유값"과 "고유벡터"로 표현하는 방법이다.

# 고유값 분해 수행
V = eigenvectors  # 고유벡터 행렬
Lambda = np.diag(eigenvalues)  # 대각 행렬
V_inv = np.linalg.inv(V)  # 고유벡터 행렬의 역행렬

# 고유값 분해 검증: A ≈ V * Lambda * V^-1
A_reconstructed = V @ Lambda @ V_inv

print("원래 행렬 A:\n", A)
print("고유값 분해로 복원한 A:\n", A_reconstructed)
원래 행렬 A:
 [[3 1]
 [0 2]]
고유값 분해로 복원한 A:
 [[3. 1.]
 [0. 2.]]

 

결과적으로, 원래 행렬 AA 와 고유값 분해로 재구성한 AA 가 같아야 한다.