기본 콘텐츠로 건너뛰기

9월, 2024의 게시물 표시

[ML] 결정트리(Decision Tree) 모델

[data analysis] 최대우도 추정: AIC와 BIC

최대우도 추정: AIC와 BIC AIC, BIC 등 확률적 모델 선택을 위한 평가 기준은 최대우도추정(maximum kikelihood estimation) 을 근거로 작동합니다. 최대우도 추정은 관찰치를 근거로 반응변수(라벨)를 추정하는데 우도(likelihood, 가능도) 를 최대로 하기 위한 모델의 매개변수(paramenter)를 발견하는 것입니다. 예를 들어 사건의 발생(1) 확률이 μ, 발생하지 않을(0) 확률이 1-μ라 하고 샘플 (0, 1, 0, 0, 1, 0)이 이항분포를 따른다고 할 경우 최대우도 추정(L(μ))는 식 1과 같이 계산됩니다. \begin{align}P(x=1)&=\mu, \quad P(x=0)=1-\mu\\ \tag{식 1}L(\mu)&=P(x=0)\cdot P(x=1) \cdot P(x=0)\cdot P(x=0)\cdot P(x=1)\cdot P(x=0)\\ &=(1-\mu)\cdot \mu \cdot (1-\mu)\cdot(1-\mu)\cdot\mu\cdot(1-\mu)\cdot\\ &=(1-\mu)^4\mu^2 \end{align} 수학적 편의를 위해 식 1은 2와 같이 양변에 로그화를 진행하고 최대값을 산출하기 위해 μ에 대한 미분의 극값을 계산합니다. 즉, $\frac{\partial \log(\mu)}{\partial \mu} = 0$ \begin{align}&\begin{aligned}\log(L(\mu)) &= \log((1-\mu)^4\mu^2)\\ &=4\log(1-\mu)+2\log(\mu)\end{aligned}\\ &\tag{식 2} \frac{\partial \log(\mu)}{\partial \mu} = 0\\ & \Rightarrow 4\frac{1}{1-\mu}(-1)+2\frac{1}{\mu}=0\\ & \Rightarrow -4\mu+2-2\mu=0\\ & \Rightarrow \mu=\frac{1}

[data analysis] 경사하강법(Descent Gradient)

경사하강법(Descent Gradient) 최소자승법 은 공식화된 계산식에 의해 결정된 회귀계수를 적용합니다. 경사하강법은 수치적으로 모델을 최적화하는 과정에서 회귀계수를 산출합니다. 식 1의 선형회귀모형은 독립변수(x)와 종속변수(y)의 사이의 다음의 선형식을 만족하는 최적의 회귀계수를 결정하는 것입니다. \begin{align} \tag{식 1}&y=xW\\&W:\text{회귀계수(가중치)}\end{align} 예를 들어 다음의 자료는 sklearn.datasets.make_regression(n_samples, n_features, coef, random_state, …) 함수를 사용하여 생성한 데이터 입니다. import numpy as np import pandas as pd from sklearn.datasets import make_regression import matplotlib.pyplot as plt import sympy as sp X,y, cof= make_regression(n_samples=1000, n_features=1, coef=True, random_state=1) cof array(38.69892343) X.shape, y.shape ((1000, 1), (1000,)) 역으로 위 자료의 선형회귀 모델을 생성한다고 할 경우 y=xw로부터 식 2와 같이 계산되는 mse가 최소가 되는 방식으로 W를 결정해야 합니다. $$\begin{align}\tag{식 2}\text{mse}&=\frac{\sum^n_{i=1}(\hat{y}-y)^2}{n}\\&=\frac{\sum^n_{i=1}(xW-y)^2}{n} \end{align}$$ W를 임의적으로 적용할 경우 mse의 변화는 그림 1과 같이 2차 곡선의 형태를 나타냅니다. plt.figure(figsize=(4, 3)) w=np.linspace(-50, 50, 100)#회귀계수의 변화 mse=[np.sum((X*

[Stock] 이동평균선과 추세

이동평균선과 추세 이평선에 의한 대순환 6단계 단계 배열 1단계 '단기', '중기', '장기' 안정상승 2단계 '중기', '단기', '장기' 상승추세의 끝 3단계 '중기', '장기', '단기' 하락추세의 시작 4단계 '장기', '중기', '단기' 안정하락 5단계 '장기', '단기', '중기' 하락 추세의 끝 6단계 '단기', '장기', '중기' 상승 추세 시작 대순환 분석에서 중요한 단계는 1과 4단계이다. 이 부분이 추세가 나타나는 시기이다. 각 단계는 세 이평선 배열로 판단할 수 있지만 포인트가 되는 것은 추세가 오래 지속될 지의 여부이다. 이 판단은 이평선의 간격으로 판단할 수 있다. 안정상승, 안정하락 안정된 상승, 하락 추세 : 세선은 거의 평행, 이러한 형태이면 한동안 추세가 지속 가능성이 큼 가속상승, 가속하락: 상승 또는 하락이 가속도가 붙으면 세 선의 간격은 점점 벌어진다. 즉, 추세의 가속이 이루어지는 상황 추세 초기 (간격의 확대): 그 방향으로 거대한 추세가 만들어질 것으로 예상 추세 종반에 확산이 발견되었다면 더욱 크게 뻐덩나가는 경우가 있는 반면 그곳이 천장이었고 이후 급락하는 경우로 발생할 수 있음 추세에 가속도가 붙었을 경우 최종적으로 천장에 닿거나 바닥을 침으로써 추세의 종말을 맞이하게 됨 하락장의 마지막에는 매수포지션을 가진쪽이 던짐으로서(손절) 폭락이 발생, 던져야 하는 사람들이 모두 던지면 반등이 일어남. 반대로 상승 추세의 마지막에서는 매도 포지션을 가진 쪽이 매수하는 쪽으로 전환되면서 폭등이 일어나고 이 전환

[Stock] 눌림목과 박스권

눌림목과 박스권 눌림목 이평선에의한 대순환 단계 단계 배열 1단계 '단기', '중기', '장기' 안정상승 2단계 '중기', '단기', '장기' 상승추세의 끝 3단계 '중기', '장기', '단기' 하락추세의 시작 4단계 '장기', '중기', '단기' 안정하락 5단계 '장기', '단기', '중기' 하락 추세의 끝 6단계 '단기', '장기', '중기' 상승 추세 시작 이평선 의 대순환분석에서 눌림목은 다음과 같은 상황이다. 1에서 2단계 혹은 3단계까지 변환한 뒤 다시 1단계로 돌아가 상승이 지속되는 상황 1단계가 지속되는 상태에서 가격만이 중기선 또는 장기선 아래로 내려갔지만 그후 다시 원래의 수준으로 돌아가는 상승을 계속하는 상황 중기선과 장기선으로 파악. 단기선 혹은 가격이 하락 했더라도 중기선이나 장기선이 상승을 계속하고 있다면 눌림목이다. 이 경우 중기선 아래의 단기선이 다시 상승하여 단기, 중기, 장시선 배열로 간격을 벌리면서 상승을 시작했을 때가 눌림목 매수 타이밍 일시적 반등은 눌림목의 움직임과 반대. 4단계에서 5단계 또는 6 단계까지 변화한 뒤에 다시 4단계로 돌아가 하락을 지속하는 상황 4단계가 지속하는 상태에서 가격 만이 중기선 혹은 장기선 위로 올라갔지만 다시 원래 수준으로 돌아가 하락하는 상태 일시적 반등을 간파하는 포인트는 눌림목과 반대. 단기선 혹은 가격이 상승, 중기선이나 장기선 하락 지속 → 일시적 반등 그러므로 단기가 중기위로 일시 상승후에 다시 내려기 장기, 중기, 단기서의 순서로 간격을 벌리면서 하락을 시작했을 때가 고점 인식 매도 타이밍 박스권

[stock] 이동평균선에 대해

이동평균선 첫번째 역할은 가격 변동을 매끄럽게 표현하는 것입니다. 예를 들어 20일 이동평균은 20일 동안의 평균값의 추이를 나타냄. 20일 평균과 당일 가격 비교 20일 이동평균 < 당일 가격: 과거 20일 사이에 매수한 트레이더가 이익을 봤음을 의미(공매도인 경우는 손해) 20일 이동평균 > 당일 가격: 과거 20일 사이에 매수한 트레이더가 손해를 봤음을 의미(공매도인 경우는 이익) 이동평균의 추이를 관찰하는 것으로 시간의 경과에 따라 이익 또는 손실의 확대 또는 축소를 관찰 할 수 있다. 매수 포지션을 가진 쪽이 이익을 봤고 유리한 경향이 지속할 것 같다면 추격매수를 검토할 것이다. 이런 국면이면 매도 포지션을 가진 쪽이 손절을 위한 매수를 검토함으로써 가격이 더욱 상승할 지 모른다. 또는 매수포지션을 가진 쪽이 이익 실현을 위해 매도를 생각할지 모른다. 즉, 평균 매수가(또는 평균 매도가)를 파악하고 그것을 현재의 가격과 비교해서 시장에 참가한 트레이더들의 현재 손익 상황이 어떠한지를 분석하면 앞으로 어떤 흐름이 될 가능성을 추리할 수 있다. 골든크로스, 데드크로스 이동평균선을 기준으로 현재 가격의 위치에 따라 향후 가격 변동향에 큰 의미를 지닌다. 그래서 이동평균선에서 현 가격의 위치 변화 지점을 "크로스포인트(교차점)"이라 합니다. 골든크로스: 현 가격이 이동평균선 아래에서 위로 상승하는 지점 대전제는 이동 평균선이 한동안 하락하고 있고 그 이동 평균선이 하락을 멈출적으로 예상되는 조짐이 존재에서 단기선이 장시건을 아래에서 위로 교차하여 지나가는 것 데드크로스 : 현 가격이 이동평균선 위에서 아래로 하락하는 지점 이동평균선이 횡보 상태이거나 약간 하락 기조로 전환의 전제가 필요 대전제는 이동평균선이 한동안 상승, 그 이동 평균선이 상승을 멈출것으로 예상되는 조짐이 있을 것 import numpy as np import pandas as pd import yfinance as

[data analysis] 정규화된 회귀모델

정규화된 회귀모델 회귀분석을 위한 데이터들 사이에 상호 관계가 0인 경우는 거의 존재하지 않습니다. 모든 변수가 반응변수와 연관이 있기 때문에 설명변수들 사이에 어느정도의 상관성이 존재하기 때문입니다. 그러므로 다중 회귀분석의 경우 다중공선성 문제는 내재되어 있습니다. 이 문제는 변수를 선택하는 방법으로 감소시킬 수 있습니다. 또한 기사 다중 공선성(Multicolinearity) 에서 언급한 것과 같이 변수들의 분산과 공분산의 차이를 확대시키는 방법으로 감소시킬 수 있습니다. 이러한 기법의 회귀 분석에서 ridge 회기와 lasso 회귀 모델이 있습니다. 다양한 방법들을 적용하여 많은 수의 설명변수들을 가진 자료에서 주요한 변수를 선택합니다( 특징(변수) 선택 참조 ). ridge와 lasso 회귀모델 역시 주요한 설명변수를 선택하여 모델의 복잡도를 감소시키고 다중공선성 문제를 감소시키기 위한 것입니다. Ridge 회귀모델 Lasso 회귀모델 Elasticnet 모델

[data analysis] Elasticnet 모델

Elasticnet 모델 Ridge 와 Lasso 회귀모델 의 차이는 패널티항으로 각각 L2norm과 L1norm을 적용한다는 점입니다( 정규화 참조 ). 이 차이를 결합한 모형을 Elastcnet 모델이라하며 MSE 는 식 1과 같이 계산됩니다. 이 식의 미분에 의해 회귀계수 β를 결정할 수 있습니다. \begin{align}\tag{식 1}\text{MSE}&=(y-X\beta)^T(y-X\beta)+\alpha \left(\lambda \Vert{\beta}\Vert+\frac{1-\lambda}{2}\Vert{\beta}\Vert^2\right)\\ &\alpha:\,\text{소멸계수} \\ &\lambda:\,\text{L1 또는 L2 norm 조정계수}\begin{cases}1&\text{Lasso 모델}\\0&\text{Ridge 모델} \end{cases}\end{align} sklearn.linear_model.ElasticNet() 클래스를 사용하여 모델을 생성할 수 있습니다. 또한 교차검정으로 적정한 α와 L1ration(λ)를 결정하여 모델을 생성하는 ElasticNetCV() 를 사용할 수 있습니다. 예 1) 코스피지수(kos), 코스탁지수(kq), kodex 레버리지(kl), kodex 인버스(ki), 그리고 원달러환율(WonDol)의 일일 시가, 고가, 저가, 종가(o,h,p,c)들을 설명변수로 사용하여 삼성전자(sam)의 일일 종가를 추정하는 Elastic 회귀모델을 생성합니다. import numpy as np import pandas as pd from sklearn.linear_model import ElasticNet, ElasticNetCV from sklearn.datasets import make_regression import yfinance as yf import matplotlib.pyplot as plt st=pd.Timestamp(2023,1, 10)

[data analysis] Lasso 회귀모델

8.4.2 Lasso 모델 Ridge 모델 은 L2 norm(계수의 제곱합)의 패널티 항에 음이 아닌 실수의 소멸계수를 가지므로 회귀계수가 0에 도달할 수 없으므로 변수의 수를 감소시킬 수 없습니다. 대신에 Lasso 모델은 식 1과 같이 패널티항으로 L1 Norm 을 사용하여 일부 회귀계수를 0로 만들 수 있습니다. 그러므로 모델의 복잡성을 약화시킴으로서 다중공선성 문제를 개선시킬 수 있습니다. \begin{align}\tag{식 1} \text{MSE}& = (y − Xβ)^T(y − Xβ) + α\Vert{β}\Vert\\ & X,\, y:\,\text{설명, 반응변수}\\ &\alpha,\;β: \text{소멸계수, 회귀계수} \end{align} 식 1에서 패널티항이 1차이므로 β = 0인 경우는 미분할 수 없습니다. 이 경우 미분 가능하지 않은 볼록함수에 적용할 수 있는 subdifferential(하방미분) 을 적용하여 식 2와 같이 미분을 계산합니다. $$\tag{식 2}\frac{\partial \Vert{\beta}\Vert}{\partial \beta}=\begin{cases}1& \beta \gt 0\\ [-1,\,1]& \beta =0\\ -1 & \beta \lt 0 \end{cases}$$ 식 2를 적용하여 MSE의 최소점을 찾기 위한 미분결과는 식 3과 같습니다. $$\tag{식 3}\frac{\partial \text{MSE}}{\partial \beta}=\begin{cases}-2X^Ty+2X^TX\beta+\alpha=0& \beta \gt 0\\ -2X^Ty+2X^TX\beta+\alpha[-1,\,1]=0& \beta =0\\ -2X^Ty+2X^TX\beta-\alpha=0 & \beta \lt 0 \end{cases}$$ 식 3을 정리하면 Lasso 모델의 회귀계수(β)는 식 4와 같이 계산됩니다. $$\tag{식 4}\beta=\beg

[data analysis] Ridge 회귀모델

Ridge 회귀모델 Ridge 회귀에서의 mse식은 식 1과 같이 OLS로부터의 값에 회귀계수에 가중치를 고려하여 정의합니다. 이항을 패널티(penalty) 라고 하며 가중치는 패널티를 조절하기 위한 것으로 α라는 소멸 상수(shrinkage constant) 라고 합니다. 이 식으로 정의된 회귀계수의 경우 가중치로 인해 큰 값과 작은 값의 차이가 증가하므로 큰 계수에 의한 영향은 더욱 커지지만 작은 크기의 계수에 의한 영향은 더욱 감소할 것입니다. 이 과정은 영향력이 큰 설명변수들을 선택하는 것과 유사한 효과가 발생합니다. \begin{align}\text{MSE}&= (y − Xβ)^T(y − Xβ)-\alpha\Vert{\beta^2}\Vert \quad \alpha \ge 0\\ \frac{\partial \text{MSE}}{\partial \beta}& = −2X^Ty + 2X^TXβ - 2αβ = 0\\ \tag{식 1} \Leftrightarrow & (X^TX - αI)β = X^Ty\\ \Leftrightarrow & β = (X^TX - αI)^{-1}X^Ty\\ & X,\, y:\; \text{설명, 반응변수}\\& α,\, β:\; \text{소멸계수, 회귀계수}\end{align} 식 1에서 나타낸 것과 같이 ridge 모델의 패널티 항은 L2 Norm (계수의 제곱합)으로 회귀계수에 대해 2차식이 됩니다. 2차식의 미분으로 최소점을 계산할 수 있습니다. 식 2와 같이 X T X + αI는 변수들의 공분산행렬의 대각원소들에게만 변동을 주는 형태로 변수들의 각 분산과 공분산의 차이를 확대시킵니다. 이 결과는 다중공선성 에서 소개한 것과 같이 역행렬의 각 값을 축소하여 회귀계수들이 분산을 감소시킵니다. 이러한 감소는 다중공선성 문제의 축소로 이어야 집니다. $$\tag{식 2}\begin{bmatrix}x_1& x_2& x_3\\y_1& y_2& y_

[data analysis] 다중 공선성(Multicolinearity)

다중 공선성(Multicolinearity) 최소자승법 은 모델에 의해 생성되는 오차를 최소화하도록 설계된 방법입니다. 식 1은 기사 '회귀계수의 추정: 최소제곱법(Least Square method)'의 식 8 을 자세히 나타낸 것입니다. \begin{align} \text{MSE}&=(y-X\beta)^T(y-X\beta)\\ \frac{\partial \text{MSE}}{\partial \beta}&=\frac{\partial }{\partial \beta}(y-X\beta)^T(y-X\beta)=0\\ & \Leftrightarrow \frac{\partial }{\partial \beta}(y^T-X^T\beta^T)(y-X\beta)\\ \tag{식 1}& \Leftrightarrow \frac{\partial }{\partial \beta}\left(y^Ty-y^TX\beta -\beta^TX^Ty+\beta^TX^TX\beta \right) \\ & \Leftrightarrow \frac{\partial }{\partial \beta}\left(y^Ty-y^TX\beta -(y^TX\beta)^T+\beta^TX^TX\beta \right) \\ & \Leftrightarrow -y^TX - X^Ty + 2X^TX\beta =0\\ & \Leftrightarrow X^TX\beta = X^Ty \\ & \Leftrightarrow \beta=(X^TX)^{-1}X^Ty\\ \because&\; X^Ty \leftrightarrow y^TX,\quad b^TX^TXb \leftrightarrow X^2b^2\end{align} 식 1에서 나타낸 것과 같이 회귀계수는 X T X의 역행렬에 의존합니다. 또한 행렬 X T X에 의해 공분산 행렬를 계산할 수 있습니다( 공분산과 상관계수의 식 6 참조 ). 그러므로 이 행렬의 대각요소들을 각 변수의 분산, 대

[Linear Algebra] 이차형식(Quadratic forms)

이차형식(Quadratic forms) ax 2 + bxy + cy 2 과 같은 이차식은 식 1과 같이 행렬 형태로 나타낼 수 있습니다. \begin{align} ax_1^2 + bx_1x_2 + cx_2^2 & = \begin{bmatrix}x_1& x_2\end{bmatrix} \begin{bmatrix} a&\frac{b}{2}\\\frac{b}{2}&c \end{bmatrix} \begin{bmatrix} x_1\\x_2\end{bmatrix}\\ \tag{식 1} Q(x)& = x^TAx\\ &A:\; \text{대칭행렬} \\ & x:\; \text{변수벡터} \end{align} 식 1과 같이 이차식을 Q(x)로 표시하면 변수벡터와 ℝ 2 차원의 대칭행렬인 계수행렬의 내적으로 나타낼 수 있습니다. 가장 간단한 이차 형태는 Q(x) = x T Ix =‖x‖ 2 입니다. 위 Q에서 대칭 행렬 A의 대각원소들은 2차항의 계수이며 대각 외 요소들 중에 대칭된 요소들의 합은 1차 항들의 계수가 됩니다. 그러므로 ℝ 2 차원의 항등행렬(I)을 표준행렬로 적용하는 경우는 식 2의 이차식을 나타낸 것입니다. $$\tag{식 2}\begin{bmatrix}x_1& x_2\end{bmatrix}\begin{bmatrix}1& 0\\0& 1\end{bmatrix}\begin{bmatrix}x_1\\x_2\end{bmatrix}=x_1^2+x_2^2$$ 식 1에서 A는 대칭행렬을 나타냅니다. 이 행렬의 대각원소들은 2차항의 계수이며 대각 외 원소들의 합은 1차 항들의 계수가 됩니다. 예를 들어 이차식의 형태 ax 2 +bxy +cx 2 는 식 2와 같이 행렬 형태로 나타낼 수 있습니다. 예 1) 대각 행렬 A와 B를 이차 형태로 표현합니다. $$A=\begin{bmatrix}4 & 0 \\ 0 & 3 \end{bmatrix} \quad B=\begin{bm

[Linear Algebra] 스펙트럴 분해(Spectral decomposition)

스펙트럴 분해(Spectral decomposition) 행렬 A의 고유값 집합을 A의 스펙트럼(spectrum) 이라고 합니다. 대칭행렬의 스펙트럼은 다음과 같은 특징이 있습니다. 대칭행렬의 스펙트럼 n×n 차원의 대칭행렬 A에서 A는 n개의 서로다른 고유값을 가집니다. 각 고유값 λ과 그것의 배수는 같은 효과를 나타냅니다. 즉, 고유값의 배수를 적용할 경우 고유벡터의 길이만 변할 뿐 방향은 바뀌지 않습니다. 다른 고유값들에 대응하는 고유벡터들은 직교관계에 있습니다. A는 직교적으로 대각화가 가능합니다. 고유값 분해 방법으로 대칭행렬 A는 고유값을 대각 원소로 하는 대각행렬(D)과 고유벡터들로 구성된 고유 행렬(U)을 사용하여 식 1과 같이 분해할 수 있습니다. 이와 같이 대칭행렬의 고유값분해를 스펙트럴분해(spectral decomposition) 라고 합니다. \begin{align}A & = UDU^{-1} = UDU^T\\ \tag{식 1}& U:\;\text{고유벡터}\\ & D:\;\text{고유값을 대각요소로하는 대각행렬}\end{align} 예 1) 대칭행렬 A에 대해 식 1을 확인해 봅니다. A=np.array([[7, 2],[2,4]]) print(A) [[7 2] [2 4]] eig_val=solve(det(cheM), l) eig_val d, U=la.eig(A) D=np.diag(d) print(D) [[8. 0.] [0. 3.]] print(U.round(3)) [[ 0.894 -0.447] [ 0.447 0.894]] 다음 결과와 같이 행렬 A의 고유행렬에 대한 정규직교적 특징 을 만족합니다. np.allclose(U.T, la.inv(U)) True 결과적으로 위 식과 같이 행렬 A의 고유 분해가 이루어집니다. np.allclose(A, U@D@la.inv(U)) True 예 2) 다음 행렬 A의스펙트럴 분해를 결정합니다.

[Linear Algebra] 대칭행렬의 대각화

대칭행렬의 대각화 대칭행렬(Symmetric matrix) 은 주 대각원소를 기준으로 위 부분과 아래부분의 원소들이 대칭되는 구조이며 대표적인 특성으로 식 1에 나타낸 것과 같이 원시행렬과 전치행렬은 같습니다. $$\tag{식 1}A = A^T$$ 식 1은 모든 대칭행렬에 대한 특성이지만 고유값 분해의 조건 을 만족하는 가역적 대칭행렬의 경우는 다음의 특성을 가집니다. 서로 다른 고유값에 대응하는 고유벡터들은 직교(orthogonal) 관계에 있습니다 정규직교(orthonormal) 관계로 변형할 수 있습니다. 식 2와 같이 가역적 대칭행렬을 구성하는 각 열벡터($x_1,\; x_2$)의 내적은 0가 됩니다. $$\tag{식 2} x_1^Tx_2=0$$ 식 2의 증명은 식 3과 같이 λ 1 x 1 T x 2 를 정리하는 것으로 시작합니다. \begin{align}\lambda_1 x_1^Tx_2&= (\lambda_1 x_1)^Tx_2\\ & = (Ax_1)^Tx_2\\ \tag{식 3} & = x_1^TA^Tx_2 \\& = x_1^TAx_2\\ & = x_1^T\lambda_2x_2\\& = \lambda_2 x_1^Tx_2\\ \because&\; A=A^T\end{align} 식 3을 정리하면 식 4와 같이 나타낼 수 있습니다. \begin{align}\lambda_1 x_1^Tx_2& = \lambda_2 x_1^Tx_2\\\tag{식 4} \Rightarrow & \lambda_1 x_1^Tx_2 - \lambda_2 x_1^Tx_2=0\\ \Rightarrow& (\lambda_1 -\lambda_2)x_1^Tx_2=0 \end{align} 식 5.3.4에서 고유값 λ 1 과 λ 2 이 서로 다르기 때문에 고유벡터들 x 1 과 x 2 의 내적이 0 이어야 합니다. 이것은 두 벡터의 내적이 0인 것으로 그 고유벡터들은 서로 직교 관계에 있음을

[Linear Algebra] 고유값분해(Eigenvalue Decomposition)

고유값 분해(Eigen-Decomposition) 식 1과 같이 행렬 A가 가역행렬인 P과 대각행렬 D를 사용하여 유사변환이 가능하다면 그 행렬은 대각 가능(Diagonalizable) 하다고 합니다. 즉, 식 2와 같이 행렬 A의 고유값과 고유행렬에 대한 유사변환(Similarity transformation) 이 성립합니다. 예를 들어 2×2 정방행렬 A에 대해 고유값과 고유벡터들로 분해하는 다음과 같으며 고유값분해 (Eigenvalue Decomposition) 라고 합니다. \begin{align}\text{A}& =\text{PDP}^{-1}\\\tag{식 1}& P:\;\text{고유행렬}\\& D:\;\text{고유값으로 구성된 대각행렬}\end{align}   \begin{align} A=& \begin{bmatrix} a_{11}& a_{12}\\a_{21}& a_{22} \end{bmatrix}\\ \tag{식 2}\text{고유값}& =\begin{bmatrix} \lambda_1 & \lambda_2 \end{bmatrix}\\ \text{고유행렬}& =\begin{bmatrix} v_{11}& v_{12}\\v_{21}& v_{22} \end{bmatrix}\\ \begin{bmatrix} a_{11}& a_{12}\\a_{21}& a_{22} \end{bmatrix}&= \begin{bmatrix} v_{11}& v_{12}\\v_{21}& v_{22} \end{bmatrix}\begin{bmatrix} \lambda_1& 0\\0& \lambda_2 \end{bmatrix}\left(\begin{bmatrix} v_{11}& v_{12}\\v_{21}& v_{22} \end{bmatrix}\right)^{-1}\end{align} 예 1) 다음 행렬 A에 위 대각화를

[Linear Algebra] QR 분해(Decomposition)

QR 분해(Decomposition) 임의의 벡터와 관련된 직교 벡터를 계산하기 위해 Gram-Schmidt 과정을 적용하였습니다. 이 과정을 사용하여 식 1과 같이 행렬을 구성하는 벡터들의 직교벡터들로 구성된 직교행렬과 그에 대응하는 행렬로 분해될 수 있습니다. 이러한 분해를 QR 분해(Decomposition) 라고 합니다. 즉, m × n 형태의 행렬 A가 선형독립이라면 식 1과 같이 분해할 수 있습니다. $$\begin{align}\tag{식 1} \text{A} = \text{QR} \end{align}$$ Q: 열공간 A에 정규직교인 m×n 차원의 행렬 (Col A) R: n×n 차원의 상삼각 역행렬, 대각원소는 양수입니다. 예 1) 다음 행렬 A의 QR 분해를 계산합니다. $$A=\begin{bmatrix} 1& 0 & 0 \\1& 1& 0\\1& 1& 1\\1& 1 & 1 \end{bmatrix}$$ 행렬 A를 구성하는 열 벡터들이 기저벡터인지를 확인합니다. 즉, 선형독립인지를 확인합니다. rref() 메서드를 적용합니다. import numpy as np import numpy.linalg as la from sympy import * A=np.array([[1,0,0],[1,1,0],[1,1,1], [1,1,1]]) Matrix(A).rref() (Matrix([ [1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 0]]), (0, 1, 2)) 위 결과에 의하면 A의 모든 열벡터들이 기저 벡터 입니다. 각 벡터들에 직교 기저는 Gram-Schmidt 과정 을 적용하여 계산할 수 있습니다. a1, a2, a3=A[:,0], A[:,1], A[:,2] v1=a1 v2=a2-(a2@v1)/(v1@v1)*v1 print(v1) print(v2) [1 1 1 1] [-0.75 0.2

[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개의 고유벡터를 가진다면 대각화가 가능합니다. 고유벡터는 기저벡터를 의미하