기본 콘텐츠로 건너뛰기

라벨이 고유벡터인 게시물 표시

[matplotlib]quiver()함수

[data analysis] 데이터 행렬의 차원 축소

데이터 행렬의 차원 축소 관련된 내용 고유벡터(Eigenvector)와 고유값(Eigenvalue) 직교행렬과 주성분 주성분 분석(Principal component analysis, PCA)은 데이터 행렬의 차원을 축소시키는 기법으로 그 행렬의 고유값과 고유벡터를 기준으로 새로운 변수 행렬을 생성합니다. 행렬 A에 대해 식 1을 만족하는 벡터 x와 스칼라 λ를 각각 고유벡터와 고유값이라고 합니다. \begin{align}\tag{식 1}Ax &= λx\\ A,\, x,\, \lambda:&\;\text{행렬, 고유벡터, 고유값(스칼라)}\end{align} 식 1의 행렬 A와 벡터 x의 행렬곱은 행렬 A의 선형변환입니다. 즉, x는 행렬 A를 선형적으로 확대, 축소, 또는 회전하기 위한 벡터가 됩니다. 식의 우항인 벡터와 스칼라 곱은 벡터의 크기만 변환하며 방향은 유지 됩니다. 그러므로 식이 만족한다는 것은 행렬 A의 방향을 나타낼 수 있으며 그 방향을 유지하면서 행렬의 변환을 일으킬 수 있는 스칼라가 존재함을 나타냅니다. 이러한 벡터와 스칼라를 고유벡터(eigenvector), 고유값(eigenvalue)이라고 합니다. 고유벡터(eigenvector) : 벡터의 선형변환시 변하지 않는 방향을 나타내는 벡터로 그 변하지 않는 방향을 주축(principal axis) 라고 합니다. 고유값(eigenvalue) : 고유벡터의 크기를 결정하는 값 행렬의 고유값과 고유벡터는 numpy.linalg.eig() 함수로 확인할 수 있습니다. import numpy as np A=np.array([[3,2],[2,4]]) print(A) [[3 2] [2 4]] eval,evec=la.eig(A) print(evec.round(3)) [[-0.788 -0.615] [ 0.615 -0.788]] print(eval.round(3)) [1.438 5.562] 두 객체의 값들을 비교하기 위해 numpy.al...

[Linear Algebra] 대각화(Diagonalization)

대각화(Diagonalization) 정방행렬 A의 고유값과 고유벡터의 관계는 식 1과 같습니다. \begin{align}\tag{식 1}Av&=\lambda v= v \lambda\\ A&=v\lambda v^{-1}\\& v,\, \lambda:\;\text{고유벡터, 고유값} \end{align} 식 1은 유사변환과 동일한 형식을 나타내지만 유사변환이 되기 위해서는 v, λ 모두 정방행렬이 되어야 합니다. 그러므로 식 1을 식 2와 같이 유사변환 하기 위해서는 식 1의 고유벡터와 고유값은 각각 고유행렬(P)과 고유값을 대각원소로 하는 대각행렬(D)을 치환됩니다(식 3). 고유벡터는 기저벡터이므로 고유행렬은 가역행렬입니다. $$\tag{식 2} A=PBP^{-1} \Leftrightarrow P^{-1}AP=B$$ 고유값을 대각행렬로 전환하기 위해 np.diag(대각요소들) 을 적용합니다. A=np.array([[3,1],[1,3]]) eigVal, eigVec=la.eig(A) D=np.diag(eigVal) print(D) [[4. 0.] [0. 2.]] sim=eigVec@D@la.inv(eigVec) print(np.isclose(A, sim)) [[ True True] [ True True]] 위 관계는 식 3과 같이 유사변환으로 나타낼 수 있습니다. \begin{align}\tag{식 3}A&=PDP^{-1}\\P:&\;\text{고유행렬}\\D:&\;\text{고유값으로 구성된 대각행렬} \end{align} 식 3은 결국 행렬 A를 기저벡터들로 구성된 행렬들로 분해(factorization)한 것 입니다. 정방 행렬 A가 고유행렬 P와 대각행렬 D를 사용하여 식 3과 같이 유사변환이 가능하다면 행렬 A는 대각가능(Diagonalizable) 하다고 합니다. 즉, n×n 차원의 정방행렬 A가 n개의 고유벡터를 가진다면 대각화가 가능합니다. 고유벡터는 기저벡터를 의미하...

[Linear Algebra] 고유벡터(Eigenvector)와 고유값(Eigenvalue) 연습

고유벡터(Eigenvector)와 고유값(Eigenvalue) 연습 관련된 내용 고유벡터(Eigenvector)와 고유값(Eigenvalue) 예 1) 행렬 A의 특성 방정식과 고유값을 계산해봅니다. $$ \left[\begin{matrix}1 & 3 & -1.5\\9 & - \frac{27}{2} & 4.5\\7 & - \frac{39}{2} & \frac{15}{2}\end{matrix}\right]$$ 행렬 A의 고유값 r을 가정하여 표현한 특성방정식(det(A − λI))은 다음과 같습니다. 다음 코드의 sympy.rational() 함수를 분수를 표시하기 위해 적용한 것입니다. r=symbols('r', real=True) A=Matrix([[1, 3, -1.5],[9, -Rational("27/2"), 4.5],[7, -Rational("39/2"), Rational("15/2")]]) cheqM=A-r*eye(3) cheqM $\left[\begin{matrix}1 - r & 3 & -1.5\\9 & - r - \frac{27}{2} & 4.5\\7 & - \frac{39}{2} & \frac{15}{2} - r\end{matrix}\right]$ cheq=det(cheqM)#특성방정식 expand(cheq) -r 3 - 5r 2 +36.0r sol=solve(cheq, r) [sp.N(i, 3) for i in sol] [-9.00, 0, 4.00] numpy.linalg.eigvals() 함수를 사용하여 고유값을 확인해 봅니다. eigVal=la.eigvals(np.array(A, dtype=float)) print(np.around(eigVal, 3)) [-9. 4. -0.] 예 2) 행렬 A에 대해 벡터 v가 고유 벡터인지를 결...

[Linear Algebra] 고유벡터(Eigenvector)와 고유값(Eigenvalue)

고유벡터(Eigenvector)와 고유값(Eigenvalue) 고유 벡터(eigenvector) 는 정방 행렬의 선형 변환이 일어난 후에도 방향이 변하지 않는 영벡터(zero vector)가 아닌 벡터들을 의미합니다. 즉, n차원 공간에서 임의의 벡터를 표현할 수 있는 기준이 되는 벡터인 기저(basis) 벡터 를 의미합니다. 그러므로 행렬 A의 고유벡터 v 사이에는 식 1의 관계가 성립합니다. Av = λv (식 1) (A − λ)v = 0 조건) λ ≠ 0 식 1에서 A는 가역행렬이고 λ는 스칼라로서 고유값(eigenvalue) 이라고 합니다. 예 1) 행렬 A와 두 벡터 u, v의 관계를 조사해 봅니다. $$A=\begin{bmatrix}3&-2\\1&0\end{bmatrix}, \quad u=\begin{bmatrix}-1\\1\end{bmatrix}, \quad v=\begin{bmatrix}2\\1\end{bmatrix}$$ 행렬 A와 미지의 벡터 x와 선형결합한 결과 벡터가 각각 u, v일 경우 선형독립인지를 결정합니다. 선형독립일 경우 A는 기저행렬이 됩니다. A=np.array([[3,-2],[1,0]]) u=np.array([-1,1]) v=np.array([2,1]) Au=np.c_[A, u] print(Au) [[ 3 -2 -1] [ 1 0 1]] Matrix(Au).rref() (Matrix([ [1, 0, 1], [0, 1, 2]]), (0, 1)) Av=np.c_[A, v] print(Av) [[ 3 -2 2] [ 1 0 1]] Matrix(Av).rref() (Matrix([ [1, 0, 1], [0, 1, 1/2]]), (0, 1)) 행렬 A와 벡터 u, v를 결합한 확대행렬 Au, Av의 기약행 사다리꼴 형태 (rref) 을 검사한 결과는 A의 모든 열이 피봇열이므로 행렬 A의 급수(Rank) 가 2임을 나타냅니다. 이 행렬의 급수는 numpy....