고유값(Eigenvalue)과 고유벡터(Eigenvector)는 다양한 분야에서 폭넓게 활용되는 개념입니다. 독일어에서 'Eigen'은 '자신의' 또는 '특유의'라는 의미를 가지며, 고유벡터는 '특성 벡터(characteristic vector)'라고도 불립니다.
예를 들어, 데이터셋에 어떤 변환을 적용해야 하는데 데이터의 방향은 그대로 유지되어야 한다는 조건이 있다고 가정해 봅시다. 바로 이럴 때 고유값과 고유벡터가 유용하게 사용됩니다. 주성분 분석(PCA)과 같은 차원 축소 기법에서도 핵심적인 역할을 담당합니다.
고유값과 고유벡터의 정의
정사각행렬(행의 개수와 열의 개수가 같은 행렬)이 주어졌을 때, 고유값과 고유벡터는 아래의 방정식을 만족합니다.
A·v = λ·v
여기서 A는 정사각행렬, v는 고유벡터, λ(람다)는 고유값을 의미합니다. 즉, 행렬 A가 벡터 v에 작용했을 때 결과가 원래 벡터와 같은 방향으로 스케일만 변한다면, 그 벡터가 고유벡터이고 스케일 인수가 고유값입니다.
일반적으로 고유값을 먼저 구한 뒤, 이를 이용해 고유벡터를 계산합니다.
참고: 고유값은 3차원 이상의 차원에서도 문제없이 잘 동작합니다.
SciPy의 'eig' 함수 사용법
이러한 복잡한 수학적 계산을 일일이 손으로 수행하는 대신, SciPy 라이브러리에서 제공하는 'eig' 함수를 사용하면 고유값과 고유벡터를 손쉽게 계산할 수 있습니다.
함수 문법
scipy.linalg.eig(matrix)
매개변수로 전달된 행렬의 고유값과 고유벡터를 튜플 형태로 반환합니다. 실제 사용 예시를 살펴보겠습니다.
예제 코드
from scipy import linalg
import numpy as np
my_arr = np.array([[5,7],[11,3]])
eg_val, eg_vect = linalg.eig(my_arr)
print("The Eigenvalues are :")
print(eg_val)
print("The Eigenvectors are :")
print(eg_vect)실행 결과
The Eigenvalues are : [12.83176087+0.j -4.83176087+0.j] The Eigenvectors are : [[ 0.66640536 -0.57999285] [ 0.74558963 0.81462157]]
코드 설명
- 필요한 라이브러리인 SciPy의 linalg 모듈과 NumPy를 임포트합니다.
- NumPy의 array 함수를 사용하여 특정 값을 가진 2x2 행렬을 정의합니다.
- 이 행렬을 'eig' 함수의 매개변수로 전달하면, 함수가 해당 행렬의 고유값과 고유벡터를 자동으로 계산합니다.
- 계산된 고유값은 eg_val 변수에, 고유벡터는 eg_vect 변수에 각각 저장됩니다.
- 마지막으로 print 함수를 통해 결과를 콘솔에 출력합니다.
출력 결과에서 고유값이 복소수 형태(+0.j)로 표시되는 점에 유의하세요. 'eig' 함수는 일반적인 복소수 고유값도 처리할 수 있도록 설계되어 있기 때문입니다. 실수 고유값만 필요한 경우에는 scipy.linalg.eigh 함수를 사용하는 것도 좋은 대안입니다.