기본 콘텐츠로 건너뛰기

라벨이 linearAlgebra인 게시물 표시

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

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은 열단위 즉, 행 방향으

Gram-Schmidt 과정

Gram-Schmidt 과정  그람 슈미트 과정은 0이 아닌 R n 의 부분공간에서 직교 또는 정규직교 기저를 생성하는 단순한 알고리즘입니다. import numpy as np import numpy.linalg as LA from sympy import * def coefS(x, y):       x=np.dot(x.T, y)       y=np.dot(y.T, y)       return(x/y) 예 1) W=Span{$x 1 , x 2 }일 때 W에서 직교 기저인 {v 1 , v 2 }? $x_1 =\left[\begin{array}{r}3\\6\\0\end{array}\right],\; x_2=\left[\begin{array}{r}1\\2\\2\end{array}\right]$ 이 예에 대한 그림은 다음과 같습니다. 위 그림에서 공간 W의 직교기저는 v 1 , v 2 로 나타낼 수 있으며 벡터 x 2 은 벡터 $x 1 위에 직교 투영됩니다. 그러므로 v 1 =x 1 관계를 가정할 수 있습니다. 그러므로 x 2 는 다음과 같이 분해 할 수 있습니다. x 2 = v 2 +p 위 식에서 p는 직교 기저인 x 1 =v 1 을 사용하여 다음과 같이 계산됩니다. ( 직교 투영 의 Eq. 1 참조) $p=\frac{x_2 \cdot x_1}{x_1 \cdot x_1}x_1$ 그러므로 $v_2=x_2-\frac{x_2 \cdot x_1}{x_1 \cdot x_1}x_1$ p=coefS(x2,x1)*x1; p      array([[1.],                    [2.],                    [0.]]) v2=x2-p; v2      array([[ 0.],                    [ 0.],                    [ 2.]]) x 2 =Span{v 1 , v 2 }가 성립합니다. 즉, v 1 , v 2 의 선형결합으로 x 2 가 생성되며 선형

Affin combination과 linear combination

기하학적으로 두 점들이 이루는 집합 S에서 이 점들을 통과하는 선이 그 집합내에 존재한다면 그 집합은  affin입니다. 이것은 S의 두 점에 대한 모든 affin combination은  S를 포함합니다. 정리하면 집합 S의 점들에 대한 모든 affin combination이 S 내에 존재한다면 그 집합은 Affine 입니다. S=aff S → S는 affine 간단히 말하면 어떤 집합 S는 선형결합이 존재하고 그 집합의 원소들 사이의 Affine combination에서도 선형결합이 성립해야 한다는 것입니다. 이것은  linear combination이 성립한다면 Affine combination이 이루어지는 것을 의미 합니다. 선형관계성을 알아보기 위해 동차시스템(homogeneous system) 을 먼저 정의합니다. 어떤 시스템을 동차시스템으로 만드는 것은 다음과 같습니다. Ax = b → Ax-b=0 이 변화를 행렬 형태로 나타내보면 다음과 같습니다.  $A=\left[\begin{matrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{matrix}\right], x=\left[\begin{matrix}x_{1}\\x_{2}\end{matrix}\right], b=\left[\begin{matrix}b_{1}\\b_{2}\end{matrix}\right] $ $\left[\begin{matrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{matrix}\right]\left[\begin{matrix}x_{1}\\x_{2}\end{matrix}\right]=\left[\begin{matrix}b_{1}\\b_{2}\end{matrix}\right] \\ \rightarrow \left[\begin{matrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{matrix}\right]\left[\begin{matrix}x_{1}\\x_{2}\end{

affin combination이란

f(x) =f($x_1, x_2, \cdots. x_n$) 위 함수에서 $x_1, x_2, \cdots. x_n$은 함수 f의 인수들 입니다. 이 함수는 $R^n \rightarrow R^n$의 영역에서 이루어 집니다. 즉, n 차원의 실수 집합에서  n 차원의 실수 집합에 대응하는 함수를 나타내는 것입니다. 예를 들어 4차원 실수 집합을 1차원으로 대응시키는 함수는 다음과 같이 나타냅니다. $R^4 \rightarrow R$ f(x) = $x_1+x_2-x_4^2$ 위 함수는 각 항의 계수 벡터와 변수를 원소로 하는 벡터로 나타낼 수 있습니다. $a= \left[\begin{array}{r}1\\1\\0\\-1 \end{array}\right], \quad x=\left[\begin{array}{r}x_1\\x_2\\x_3\\x_4\end{array}\right]$ $f(x)= a^T x=\left[\begin{matrix}1&1&0&-1 \end{matrix}\right] \left[\begin{matrix}x_1\\x_2\\x_3\\x_4\end{matrix}\right]$ 위 형태는 벡터와 행렬 곱에서 앞 벡터의 열의 수와 뒤 벡터의 행의 수가 일치하여야 계산 될 수 있기 때문에 열벡터인 경우 앞 벡터는 전치시켜야 합니다. 위의 표현은 다음의 경우에서도 성립됩니다. $f(\alpha x+\beta y)=a^T(\alpha x+\beta y)=\alpha  a^T x+ \beta a ^Ty=\alpha f(x)+ \beta f(y)$ $\alpha, \beta$: scalar 위 함수는 벡터들의 선형결합 입니다. Affin 결합은 이러한 선형결합의 특별한 형태입니다. 즉, 다음과 같습니다. $c_1v_1+ c_2v_2 + \cdots +c_nv_n$ 위와 같은 선형결합에서 모든 계수의 합이 1인 경우를 $c_1+c_2+\cdots+c_n=1$을 Affin combination 이라고 합니다. 이 Affin

직교행렬과 주성분분석

주성분분석(Principal Component Analysis) 다음 행렬을 평균-편차 형태 로 가정합니다. $\left[\begin{matrix} X_1 & X_2 & \cdots &X_N \end{matrix}\right]$ 주성분분석의 목적은 X=PY 형태로 변환가능한  $p \times p$차원의 직교 행렬 P를 발견하는 것입니다. $P=\left[\begin{matrix} u_1 & u_2 & \cdots &u_p \end{matrix}\right]$ $\left[\begin{matrix} x_1 \\ x_2 \\ \vdots \\ x_p \end{matrix}\right]=\left[\begin{matrix} u_1 & u_2 & \cdots &u_p \end{matrix}\right]\left[\begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_p \end{matrix}\right]$ 위 식에서 새로운 변수 $y_1, y_2, \cdots, y_p$는 상관성이 없고 내림차순으로 정렬된 형태입니다.  Y는 P에 대해 X의 좌표벡터 가 됩니다. P가 직교행렬이므로 다음이 성립합니다. $P^{-1}PY=P^TPY=P^TX \rightarrow Y=P^TX$ 위 식으로 부터 새로운 변수인 Y역시 평균-편차 형태이므로 Y의 공분산 행렬을 유도 할 수 있습니다. $YY^T=(P^TX)(P^TX)^T=P^TXX^TP=P^TSP$ S는 변수 X에 대한 공분산 행렬로서 대칭행렬입니다. 위식에서  $YY^T=A$라 하고 S에 대해 정리하면 다음과 같습니다. $S=PAP^T$ S가 대칭행렬이고 P가 직교행렬이므로 위 식은 스펙트럴 분해 와 동일한 형태가 됩니다. 그러므로 행렬 $A=YY^T$는 행렬 S의 고유값들을 내림차순으로 정렬한 값들을 대각원소로 하는 대각행렬이 됩니다. 결과적으로 새로운 변수의 공분산 행렬은 원래의 변수의 공분산 행렬의 고유값에 의

행렬형태의 평균, 분산 그리고 공분산

평균과 공분산  관측값의 샘플을 $p \times N$ 차원의 행렬로 고려합니다. $\left[\begin{array}{rrrr}X_1 & X_2 & \cdots & X_N \end{array}\right]$ X: 열벡터 이 샘플 평균(sample mean, M)은 $M=\frac{1}{M}(X_1+X_2+\cdots+X_N)$ 평균은 모든 관찰값들의 중간(center)를 나타냅니다. 각 값들에 대한 평균과의 차이를 다음과 같이 나타냅니다. $\hat{X}_k = X_k-M \qquad k=1, \cdots, N$ 위 식은 결과적으로 평균을 0로 하기 위해 모든 관찰값들을 평균 만큼 이동시킨 것으로 관찰값들과 동일한 차원의 행렬 B로 생성됩니다. 이 행렬은 평균-편차 형태(mean-deviation form)이라고 합니다. $B=\left[\begin{array}{rrrr}X_1 & X_2 & \cdots & X_N \end{array}\right]$ 정방행렬이 아닌 행렬은 그 행렬의 전치행렬과의 곱으로 생성할 수 있으며 이것은 이차형태 를 나타내는 기본 구조입니다. 이것을 적용하여 샘플 공분산 행렬(sample covariance matrix)는 다음과 같이 $p \times p$ 행렬 S로 정의 됩니다. $S=\frac{1}{N-1} BB^T$ 위 식에서 $BB^T$는 0을 포함하여 항상 양수이므로 semidefinite 이므로 S 역시 semidefinite입니다. >>> 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_1=\left[\b

가역행렬에 대한 정의

가역행렬의 정의 n × n 차원의 정방행렬 A가 가역행렬(invertible matrix)일 경우 다음은 모두 동치입니다. 1. A의 행렬식은 0이 아닙니다. (det A ≠ 0) numpy.linalg.det() 함수에 의해 계산됩니다. import numpy as np import numpy.linalg as la import sympy as sp A=np.array([[2,3],[6, 8]]); A array([[2, 3], [6, 8]]) round(la.det(A), 4) -2.0 2. 역행렬이 존재합니다. numpy.linalg.inv() 함수에 의해 계산됩니다. Ainv=la.inv(A); Ainv array([[-4. , 1.5], [ 3. , -1. ]]) np.dot(A, Ainv) array([[1., 0.], [0., 1.]]) 3. 가역행렬 A의 전치행렬 A T 역시 가역행렬입니다. 이 두행렬의 행렬식은 같습니다. det(A) = det(A T ) AT=A.T; AT array([[2, 6], [3, 8]]) la.inv(AT) array([[-4. , 3. ], [ 1.5, -1. ]]) round(la.det(AT), 4)==round(la.det(A), 4) True round(la.det(AT), 4) -2.0 4. 행렬방정식 Ax=c에 대해 유일한 해를 가집니다. 식의 해를 계산하기 위해 numpy.linalg.solve() 함수를 적용합니다. 식의 c즉 상수항이 다음 코드의 const라면 A가 가역행렬이므로 변수 x의 해를 계산할 수 있습니다. const=np.array([2,1]).reshape(2,1);const array([[2], [1]]) sol=la.solve(A, const); s

특이값 분해

특이값 분해란? 특이값 특이값 분해 특이값분해(Singular Value Decomposition) 특이값 분해란? 고유 분해 , 스펙트럴 분해 등은 가역적인 정방 행렬 을 대상으로 합니다. 이에 반해 특이값을 이용하는 특이값 분해 (Singular Value Decomposition)는 비정방 행렬 을 정방행렬로 변형하여 분해할 수 있는 방법으로 선형 대수의 계산에서 가장 유용하게 사용되고 있습니다. 비정방행렬은 행렬에 그 행렬의 전치행렬과의 행렬곱으로 정방행렬로 만들 수 있습니다. import numpy as np import numpy.linalg as la import sympy as sp x=np.random.randint(0, 11, (3, 4));x array([[6, 5, 1, 1], [0, 5, 8, 2], [1, 9, 7, 4]]) xx=np.dot(x.T, x); xx array([[ 37, 39, 13, 10], [ 39, 131, 108, 51], [ 13, 108, 114, 45], [ 10, 51, 45, 21]]) 위 결과와 같이 전치행렬과의 행렬곱으로 생성한 정방행렬은 대칭행렬이 됩니다. 이 대칭행렬의 고유행렬은 다음과 같이 전치행렬과 역행렬이 같으므로 정규직교행렬 이 됩니다. 이 결과는 정방행렬이면서 대칭행렬 이므로 행렬의 대각화에 기반을 둔 분해(decomposition)가 가능합니다. 최종적으로 x T x 분해 결과로 부터 x의 분해를 달성할 수 있습니다. d, p=la.eig(xx) np.around(p.T, 6)==np.around(la.inv(p), 6) array([[ True, True, True, True], [ True, True, True, True], [ True, True

이차형태(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 \