기본 콘텐츠로 건너뛰기

라벨이 선형대수인 게시물 표시

통계관련 함수와 메서드 사전

A B C d E F G H I K L M N O P Q R S T U V W Z A statsmodels.ap.stats.anova_lm(x) statsmodels.formula.api.ols 에 의해 생성되는 모형 즉, 클래스 인스턴스(x)를 인수로 받아 anova를 실행합니다. np.argsort(x, axis=-1, kind=None) 객체 x를 정렬할 경우 각 값에 대응하는 인덱스를 반환합니다. Axis는 기준 축을 지정하기 위한 매개변수로서 정렬의 방향을 조정할 수 있음(-1은 기본값으로 마지막 축) pandas.Series.autocorr(lag=1) lag에 전달한 지연수에 따른 값들 사이의 자기상관을 계산 B scipy.stats.bernoulli(x, p) 베르누이분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 p: 단일 시행에서의 확률 scipy.stats.binom(x, n, p) 이항분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 n: 총 시행횟수 p: 단일 시행에서의 확률 C scipy.stats.chi2.pdf(x, df, loc=0, scale=1) 카이제곱분포의 확률밀도함수를 계산 $$f(x, k) =\frac{1}{2^{\frac{k}{2}−1}Γ(\frac{k}{2})}x^{k−1}\exp\left(−\frac{x^2}{2}\right)$$ x: 확률변수 df: 자유도 pd.concat(objs, axis=0, join=’outer’, …) 두 개이상의 객체를 결합한 새로운 객체를 반환. objs: Series, DataFrame 객체. Axis=0은 행단위 즉, 열 방향으로 결합, Axis=1은 열단위 즉, 행 방향으

이차형태(Quadratic forms)

행렬에서 각 값을 제곱하는 형태는 전치행렬과의 행렬곱으로 이루어집니다. $X^TX$ 위 식으로 부터의 값들의 합과 일반적인 형태는 공학, 통계학, 경제학, 미분기하학등에서 많이 사용되는 것으로 이차 형태(Quadratic forms)라고 합니다. $R^n$차원에서 이차형태는 함수 Q로 정의되며 벡터 x에 대해 다음과 같이 표현됩니다. $Q(x)=x^TAx$ A : 이차형태의 행렬로서 $n \times n $차원의 대칭행렬 가장 간단한 이차형태는 $Q(x)=x^TIx=||x||^2$입니다. >>> import numpy as np >>> import numpy.linalg as LA >>> import pandas as pd >>> from sympy import * >>> np.set_printoptions(precision=4, suppress=True) 1. 벡터 x의 Q(x)? $x=\left[\begin{array}{r}x_1 \\x_2 \end{array}\right]$ >>>x1, x2=symbols("x1, x2") >>> x=Matrix(2,1, [x1, x2]); x Matrix([ [x1], [x2]]) 1) >>> A=Matrix([[4,0],[0, 3]]); A Matrix([ [4, 0], [0, 3]]) >>> QA=x.T*A*x; QA Matrix([[4*x1**2 + 3*x2**2]]) 2) >>> B=Matrix([[3,-2],[-2,7]]); B Matrix([ [ 3, -2], [-2,  7]]) >>> QB=x.T*B*x; QB Matrix([[x1*(3*x1 - 2*x2) + x2*(-2*x1 + 7*x2)]]) >>> expand(QB) Matrix([

대칭행렬의 대각화와 스펙트럴 분해

대칭행렬의 대각화  대칭행렬은 다음의 관계가 성립합니다. $A^T =A$ 대칭행렬은 정방행렬이어야 하며 대각원소를 중심으로 위와 아래의 원소값이 같습니다. $\left[\begin{array}{rr}1&0\\0&-3\end{array}\right], \; \left[\begin{array}{rrr}0&-1&0\\-1&5&8\\0&8&-7\end{array}\right]$ 이러한 대칭행렬 역시 고유값을 사용하여 대각화를 적용하여 유사변환 형태로 분해할 수 있습니다.( 유사변환과 대각화 참조) >>> import numpy as np >>> import numpy.linalg as LA >>> from sympy import * >>> np.set_printoptions(precision=4) 1. 행렬 A의 대각화? >>> A=np.array([[6,-2,-1],[-2,6,-1],[-1,-1,5]]);A array([[ 6, -2, -1],        [-2,  6, -1],        [-1, -1,  5]]) $A=PDP^{-1}$ >>> d1,p=LA.eig(A) >>> d1 array([ 3.,  8.,  6.]) >>> p array([[ 0.5774,  0.7071, -0.4082],        [ 0.5774, -0.7071, -0.4082],        [ 0.5774, -0.    ,  0.8165]]) >>> d=np.eye(3) >>> >>> for i in range(len(d)): ...       d[i,i]=d1[i] ... >>> d array([[ 3.,  0.,  0.],        [ 0.,  8.,  0.],  

최소제곱법의 응용

y=f(x)를 따르는 데이터에 대해 생각해 봅니다. $(x_1, y_2),\, (x_2, y_2), \, \cdot, \, (x_n, y_n)$ 위 데이터의 패턴을 찾는 것은 f(x)의 함수를 찾는 것과 같습니다. 이러한 함수를 수학적 모형이라 합니다. 이러한 함수의 몇가지 예를 나타내면 다음과 같습니다. 1) 직선: y=ax+b 2) 2차 다항식: y=a+bx+cx 2 3) 3차 다항식: y=a+bx+cx 2 +dx 3  실험적으로 획득한 데이터들에 대해 가장 간단한 모형인 직선을 고려해 봅니다. 실험 데이터 $(x_1, y_1), (x_2, y_2), \cdots , (x_n, y_n)$ 이 데이터들의 패턴으로 직선을 고려한다면 각 점들에 대해 다음과 같이 나타낼 수 있습니다. $a+bx_1=\hat{y_1}, a+bx_2=\hat{y_2}, \cdots, a+bx_n=\hat{y_n}$ 위 식에서 각 식의 결과들을 y가 아닌 $\hat{y}$로 나타낸 것은 실험 결과에 의한 자료가 이론적으로 생성한 모형과 완전히 일치하는 경우가 거의 불가능하기 때문입니다. 위 식을 행렬의 선형시스템의 형식으로 정리하여 보면 다음과 같습니다. $\left[\begin{array}{rr}1&x_1\\1&x_2\\\vdots&\vdots\\1&x_n\end{array}\right]\left[\begin{array}{r}a\\b\end{array}\right]=\left[\begin{array}{r}y_1\\y_2\\\vdots\\y_n\end{array}\right] \rightarrow Mv=y$ 만약 위의 식을 Mv=$\hat{y}$로 나타냈다면 이 식은 유일한 해를 가지며 선형독립이 될 것입니다. 이것은 M을 구성하는 각 열벡터들은 $\hat{y}$에 대한 직교기저 가 됩니다. 그러나 계산의 대상은 실제 값 y이므로 M의 열벡터들은 직교기저가 아닙니다. 즉, y와 $\hat{y}$ 사이에 오차가 존재하므로 정확한

최소제곱해(Least Square solution)

행렬방정식 Ax=b의 해가 없는 모순 시스템(inconsistent system)에서 이 식에 가장 적합한 근사해를 찾는 방법으로 최소자승방법을 사용합니다. 이 식을 만족하는 해는 없습니다. 이 상태에서 가장 적합한 근사해는 Ax와 b와의 거리가 가장 작은 경우를 생각할 수 있습니다. 즉, ||b-Ax|| ≈0 $m \times n$ 차원의 행렬 A와 b가 $R^m$에 존재한다면 Ax=b의 최소자승해(least-square solution)은 다음 식을 만족하는 $\hat{x}$가 됩니다. 이식의 해공간의 차원은 n이므로 $R^n$ 공간에 존재합니다. $||b-A \hat{x}|| \leq ||b-Ax||$ 이 최소해를 찾는 과정에서 가장 중요한 점은 x는 A의 열공간(Col A)내에 존재하는 모든 값이 된다는 것입니다. 위 그림에서 Ax가 d의 직교 투영이 아니라는 것은 A의 열벡터들이 b에 대한 직교기저 집합이 아니라는 의미입니다. 이 경우 b와 공간 Col A와 가장 가까운 점은 b의 직교 투영인 지점이 됩니다.( 직교투영 참조) $A \hat{x}=\hat{b}$라고 하면 $\hat{b}=b_{proj, Col\,A}$라고 할 수 있습니다. $\hat{b}$는 Col A 공간내에 존재하기 때문에 다음 식은 모순되지 않은 시스템(consistent system)이 됩니다.  $$A \hat{x}=\hat{b}$$ $\hat{b}$가 Col A에 가장 가까운 점이므로 Ax=b의 최소자승해가 됩니다. 그러므로 다음 식이 성립합니다.  $b =\hat{b}+ b-A \hat{x}$ (다음 그림 참조) 위 그림과 같이 $b-A \hat{x}$ 역시 Col A와 직교입니다. 그러므로 Col A 공간에 존재하는 행렬 A와 $b-A \hat{x}$ 의 내적은 0이 됩니다. ( 내적과 직교성 에서 직교벡터 참조) $A \cdot (b-A \hat{x}) = 0 \Leftrightarrow A^T \cdot (b-A \

QR 분해(Decomposition)

내용 np.linalg.qr() QR 분해의 조건 QR 분해(Decomposition) 어떤 벡터를 구성하는 직교 벡터를 계산하기 위해 Gram-Schmidt 과정을 적용하였습니다. 행렬은 이 과정에 의해 생성된 직교행렬과 그에 대응하는 행렬로 분해될 수 있습니다. 이러한 분해를 QR 분해 라고 합니다. m×n형태의 행렬 A가 선형 독립이라면 식 1과 같이 분해할 수 있습니다. $$\begin{equation}\tag{1} \text{A} = \text{QR} \end{equation}$$ Q: 열공간 A에 정규직교인 m×n 차원의 행렬 (Col A) R: n×n 차원의 상삼각 역행렬, 대각원소는 양수입니다. 예)  다음 행렬 A의 QR 분해를 계산합니다. $$A=\begin{bmatrix} 1& 0 & 0 \\1& 1& 0\\1& 1& 1\\1& 1 & 1 \end{bmatrix}$$ 행렬 A의 열공간은 columnspace() 함수를 사용하여 계산할 수 있습니다. import numpy as np import numpy.linalg as la import sympy as sp A=np.array([[1,0,0],[1,1,0],[1,1,1], [1,1,1]]) colA=sp.Matrix(A).columnspace() for i in colA: print(f'각 열공간의 전치행렬:{i.T}, 각 열공간의 차원:{i.shape}') 각 열공간의 전치행렬:Matrix([[1, 1, 1, 1]]), 각 열공간의 차원:(4, 1) 각 열공간의 전치행렬:Matrix([[0, 1, 1, 1]]), 각 열공간의 차원:(4, 1) 각 열공간의 전치행렬:Matrix([[0, 0, 1, 1]]), 각 열공간의 차원:(4, 1) 위 결과에 의하면 A의 모든 열벡터들이 기저

직교집합, 투영 그리고 Gram-Schmidt 과정

내용 직교집합(Orthogonal set) 직교집합과 선형결합 직교적 투영(Orthogonal Projection) 정규직교(Orthonormal) 정규직교기저 정규직교벡터의 확인 그람 슈미트 과정(Gram-Schmidt) 과정 직교집합, 투영 그리고 Gram-Schmidt 과정 직교집합(Orthogonal set) 식 1과 같이 벡터의 내적이 0인 경우는 그 벡터는 직교합니다 (직교 벡터). $\mathbb{R}^n$ 차원에서 내적이 0인 모든 벡터들의 집합 u 1 , u 2 , …, u p 을 직교 집합 (orthogonal set)이라고 합니다. $$\begin{equation}\tag{1} \begin{matrix} u_i·u_j = 0\\i\neq j \end{matrix} \end{equation}$$ 예)   다음 벡터 집합이 직교 집합인지를 결정해봅니다. $$u_1=\begin{bmatrix}3\\1\\1 \end{bmatrix}, \quad u_2=\begin{bmatrix}-1\\2\\1 \end{bmatrix}, \quad u_3=\begin{bmatrix} -\frac{1}{2}\\-2\\\frac{7}{2}\end{bmatrix}$$ import numpy as np import numpy.linalg as la import sympy as sp import matplotlib.pyplot as plt u1=np.array([3,1,1]).reshape(3,1) u2=np.array([-1,2,1]).reshape(3,1) u3=np.array([-1/2,-2,7/2]).reshape(3,1) u1u2=np.dot(u1.T, u2); u1u2 array([[0]]) u1u3=np.dot(u1.T, u3); u1u3 array([[0.]]) u2u3=np.dot(u2.T,u3);

내적과 직교성

실질적인 해를 갖지 않는 모순된 시스템(inconsistent system)에 적당한 해를 찾기 위해 근사치에 대한 좋은 정의가 필요합니다. 이를 위해 벡터 공간에 거리와 정규성(orthogonality)의 개념을 도입할 것입니다. 이 정규성은 벡터 공간 W의 밖에 놓여 있는 어떤 점 y에 가장 근접한 W내의 점을 찾기 위해 이용됩니다. 이를 위해 모순된 선형 시스템을 위한 적절한(최소자승, least square)  해들을 찾기 위한 방법을 모색할 것입니다.  내적(inner product) $R^n$차원의 두 벡터 u, v에서 $u^T\cdot v$의 결과는 scalar입니다. 이것을 내적이라고 합니다. $$\left[\begin{array}{rrrr}u_1&u_2&\cdot&u_n\end{array}\right] \left[\begin{array}{r}v_1\\v_2\\\vdots\\n_n\end{array}\right] =u_1v_1+u_2v_2+ \cdots + u_nv_n$$ python에서 numpy.dot(x, y)를 사용하여 계산합니다. 이 값의 양의 제곱근이 내적이 됩니다. 또는 linalg.norm()을 사용하면 직접적으로 내적값을 계산할 수 있습니다. >>> import numpy as np >>> from sympy import * >>> import numpy.linalg as LA 1. 벡터 u, v에 대해 u•v, v•u? $$u=\left[\begin{array}{r}2\\-5\\-1\end{array}\right], \; v=\left[\begin{array}{r}3\\2\\-3\end{array}\right]$$ >>> u=np.mat("2;-5;-1"); u matrix([[ 2],         [-5],         [-1]]) >>> v=np.mat("3;2