기본 콘텐츠로 건너뛰기

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

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

변환(Transform)과 핵 그리고 치역(Kernel and Range)

내용

변환(Transform)과 핵 그리고 치역(Kernel and Range)

변환은 어떤 수 x를 식에 대입하여 그 값에 대응하는 결과인 y를 반환하는 함수를 의미합니다. 함수에 입력되는 값의 범위와 개수는 항상 결과의 범위나 개수를 확정하지 못합니다. 즉, 함수에 따라 1개의 실수 입력 값은 여러 개의 유리수를 포함하는 값으로 출력될 수도 있습니다.

함수에 입력 범위를 정의역(domain), 가능한 모든 결과물들의 범위를 공역(codomain)이라고 합니다. 예로서 python에서는 모든 수를 정수로 만들기 위해 int() 함수를 사용합니다. 이 경우 정의역은 실수이지만 공역은 정수가 될 것입니다.

import numpy as np
import numpy.linalg as la
import sympy as sp
import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.family'] = 'nanumgothic'
rcParams['font.weight'] = 'bold'
rcParams['font.size'] = '11' 
x=3.24
y=int(x)
y
3

공역 중 함수의 결과들을 (image)이라 하며 이 상들의 집합을 치역(range)이라고 합니다. 치역은 공역의 부분 집합이 됩니다. 예를 들어 이러한 정의역(x)과 상(치역)의 관계는 변환에 관계된 행렬 A에 의해 식 1과 같이 선형결합의 형태로서 다음과 같이 작성할 수 있습니다.

$$A= \begin{bmatrix} -2&-1\\0&-4 \end{bmatrix},\quad \text{x(정의역)}=\begin{bmatrix} -3\\1 \end{bmatrix},\quad \text{b(치역)}=\begin{bmatrix} -7\\-4 \end{bmatrix}$$ $$\begin{equation}\tag{1} Ax=b \Leftrightarrow T(x)=Ax \end{equation}$$

위 관계에서 치역은 공역의 부분집합이 됩니다.

치역(Range) ⊆ 공역(Codomain)

그림 1은 정의역, 공역, 그리고 치역을 나타낸 것입니다.

그림 1. 정의역(domain), 공역(codomain), 그리고 치역(range).

그림 1에서 나타낸 함수의 정의역, 공역, 그리고 치역은 그림 2에서 나타낸 것과 같이 3가지 관계로 규정할 수 있습니다.

그림 2. 정의역, 공역, 그리고 치역의 관계..
정의역, 치역과 공역의 관계
  • 단사(Injective, one-to-one) : 정의역과 공역의 일대일 대응. 그림 2(a)와 (c).
  • 전사(Subjective, onto): 치역 = 공역, 그림 2 (b)와 (c).
  • 전단사(Bijective): 일대일 대응이면서 공역(codomain)과 치역(range)이 같은 경우. 그림 2 (c).

예)
  행렬 A에 대한 상이 b일 경우 정의역인 x?

$$A=\left[\begin{matrix}4 & 4 & 2\\12 & 15 & 5\\-8 & -17 & 4\end{matrix}\right], \quad b=\left[\begin{matrix}-4\\-11\\15\end{matrix}\right]$$

위 문제는 다음과 같이 나타냅니다.

$$\begin{align}& T: \mathbb{R}^3 \rightarrow \mathbb{R}^3 \quad T(x)=Ax\\ \\ &\begin{bmatrix}4 & 4 & 2\\12 & 15 & 5\\-8 & -17 & 4\end{bmatrix} \begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}-4\\-11\\15\end{bmatrix}\end{align}$$

정방행렬에 의해 변환되는 시스템이 선형 독립인 경우 즉, 자명한 해를 가지는 경우numpy.linalg.solve()함수에 의해 계산할 수 있습니다.

A=np.array([[4,4,2],[12,15,5],[-8,-17,4]])
b=np.array([[-4],[-11],[15]])
x=la.solve(A, b);x
array([[-3.],
           [ 1.],
           [ 2.]])

두 벡터의 선형결합은 다음과 같이 나타낼 수 있습니다.

a1x1 + a2x2 = c

위 식에서 a1, a2는 스칼라이고 x1, x2, 그리고 c는 벡터를 나타냅니다.

이러한 선형 결합 에 의한 변환을 선형 변환(linear transformation)이라 합니다. 즉, 선형 변환은 식 2와 같이 함수의 형태로 표현할 수 있습니다.

$$\begin{equation}\tag{2} f(a_1x_1) + f(a_2x_2) = f(a_1x_1 + a_2x_2) \end{equation}$$    

예를 들어 2 × 3 형태의 행렬 A에 대해 T(x)=Ax의 선형 변환이 이루어지는 경우는 다음과 같습니다.

$$\begin{bmatrix} a_{11}& a_{12} &a_{13}\\ a_{21} &a_{22}& a_{23} \end{bmatrix} \begin{bmatrix} x_1\\x_2\\x_3 \end{bmatrix}= \begin{bmatrix} a_{11}x_1 + a_{12}x_2 + a_{13}x_3\\a_{21}x_1 + a_{22}x_2 + a_{23}x_3 \end{bmatrix}$$

위 식의 벡터 x가 정의역이며 우항의 결과가 치역이 됩니다. 정의역의 차원은 행렬 A의 열 차원과 같으며 치역의 차원은 A의 행차원과 같습니다.

이러한 선형변환의 모든 치역이 0이 되는 정의역을 (kernel)이라고 합니다. 식 1과 같은 선형변환의 치역이 모두 0이 되는 핵(kerl)이 되는 경우는 식 3과 같이 ker T로 나타냅니다.

$$\begin{equation}\tag{3} ker\,T = \{v \in \mathbb{R}^n |T(v)=0\} \end{equation}$$
치역이 모두 0일 경우에 정의역을 핵(kernel)이라고 합니다.

예)
  다음은 2차원에서 2차원으로 변환되는 선형변환입니다. 이 선형변환에서 ker T를 위한 조건을 결정해봅니다.

$$ T: \mathbb{R}^2 \rightarrow \mathbb{R}^2, T(x, y) = T(x-y, 0)$$

위 변환을 일으킬 수 있는 표준행렬은 다음과 같습니다.

$$\begin{align} T \left( \begin{bmatrix} x\\y \end{bmatrix}\right)&=x\begin{bmatrix}1\\0\end{bmatrix}+y\begin{bmatrix}-1\\0\end{bmatrix}\\ &=\begin{bmatrix}1&-1\\0&0\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}\\ &=\begin{bmatrix}x-y\\0\end{bmatrix} \end{align}$$

위 식에서 ker T를 위해서는 모든 치역이 0이 되어야 하므로 x=y 일 조건을 만족하여야 합니다. 그러므로 다음과 같습니다.

$$\text{ker T} = \{(x, y) \in \mathbb{R}^2| y=x\}$$

전단사(bijective)이면서 동일한 차원에서 이루어지는 변환을 동형 사상(isomorphism)이라고 합니다. 다시 말하면 동형 사상에서는 정의역과 공역(codomain)의 차원이 같습니다.

예)
  T(x, y)=(y, x) 변환의 경우 ker T=0일 경우 단사인지를 결정합니다.

$$\begin{align} T \left( \begin{bmatrix} x\\y \end{bmatrix}\right)&=x\begin{bmatrix}0\\1\end{bmatrix}+y\begin{bmatrix}1\\0\end{bmatrix}=\begin{bmatrix}x\\y\end{bmatrix}\\ \rightarrow &\begin{bmatrix}0&1\\1&0\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix} =\begin{bmatrix}0\\0\end{bmatrix} \end{align}$$

위 식은 동차 방정식의 선형결합입니다. 위 식이 자명한 해를 가진다면 일대일 반응을 의미하는 것으로서 단사입니다.

A=np.array([[0, 1], [1,0]])
la.det(A)
-1.0
c=np.zeros([2,1])
sp.Matrix(np.hstack([A, c])).rref()[0]
$\small\color{navy}{\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\end{matrix}\right]}$

표준행렬 A의 행렬식은 0이 아니며 행렬 A의 rref는 모든 열 벡터가 피벗열임을 나타냅니다. 다시 말해 표준 행렬 A는 가역 행렬이며 자명한 해를 가지고 있습니다. 따라서 위의 변환은 단사입니다.

예)
 다음 변환이 단사인지를 결정해 봅니다.

$$\begin{align} &T: \mathbb{R}^3 \rightarrow \mathbb{R}^3\\ &T\left(\begin{bmatrix} x\\y\\z \end{bmatrix}\right) =\begin{bmatrix} x+2y-z\\y+z\\x+y-2z \end{bmatrix} \end{align}$$
A=np.array([[1,2,-1], [0,1,1],[1,1,-2]])
la.det(A)
0.0
c=np.zeros([3,1])
sp.Matrix(np.hstack([A, c])).rref()[0]
$\small\color{navy}{\left[\begin{matrix}1 & 0 & -3.0 & 0\\0 & 1 & 1.0 & 0\\0 & 0 & 0 & 0\end{matrix}\right]}$

표준 행렬 A의 행렬식은 0이며 그 행렬의 rref는 자유변수를 포함하고 있습니다. 즉, 비가역행렬이며 자명하지 않은(non trivial) 해를 가집니다. 결과적으로 정의역의 각 요소에 대응하는 치역의 요소는 1개가 아닌 경우도 존재할 수 있으므로 단사(injective)가 아닙니다.

다음의 정의들은 모두 동치입니다.

  • ker T=0
  • ⇔ 이 시스템은 단사(injective)입니다.
  • ⇔ 유일한 해를 가집니다. 즉, 선형 독립입니다.

다음 선형결합을 고려해봅니다.

$$\begin{aligned} a_1x + a_2y + a_3z &= 0\\ a_4x + a_5y + a_6z &= 0\\ a_7x + a_8y + a_9z &= 0 \end{aligned}\rightarrow \begin{bmatrix}a_1& a_2 & a_3\\a_4 & a_5 & a_6\\a_7 & a_8 & a_9\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=\begin{bmatrix}0\\0\\0\end{bmatrix}$$

선형결합이 선형독립이고 다음의 조건을 만족하면 이 변환은 전단사입니다.

변수의 수 = 해의 수 = 열공간의 차원의 수

위 조건은 표준행렬의 열벡터들이 모두 기저 벡터임을 의미합니다. 또한 각 변수에 하나의 해만이 존재하므로 단사입니다.

식의 수 = 해의 수 = 행공간의 차원의 수

위 조건은 표준 행렬의 행벡터가 모두 기저 벡터임을 의미하는 것으로 공역(함수(식)의 수)와 치역(해)이 일치하는 것으로 전단사를 의미합니다.

예)
 다음 행렬에 의한 정의역과 공역의 대응방법을 결정해봅니다.

$$\begin{align} &T\left(\begin{bmatrix}x\\y\\z \end{bmatrix}\right) = \begin{bmatrix}x\\y \end{bmatrix} \\ &T = \begin{bmatrix}1&0&0\\0&1&0 \end{bmatrix} \end{align}$$

위 변환은 다음과 같이 선형결합으로 표현할 수 있습니다.

$$\begin{bmatrix} 1&0&0\\0&1&0 \end{bmatrix} \begin{bmatrix} x\\y\\z \end{bmatrix}= \begin{bmatrix} x\\y \end{bmatrix}$$

위 식은 z의 모든 수에 대해 만족합니다. 즉, 다양한 해가 존재하므로 단사(injective)는 아닙니다. 그러나 식의 수와 해의 수가 같습니다. 즉, 공역(codaomian)과 치역(range)이 같으므로 전사(subjective)입니다.

모든 전사(subjective)가 단사(injective)는 아닙니다. 그러나 단사(injective)이기 위해서는 전사(subjective)이어야 합니다. 즉, 변수의 수가 해의 수와 일치하기 위해서는 식의 수는 해의 수와 같거나 커야 합니다. 또한 단사와 전단사의 경우 모두 일대일 반응으로 유일한 해를 가져야 합니다. 이것은 변환 즉, 표준행렬이 가역행렬이어야 함을 의미합니다.

가역행렬
  • 행렬 A의 열벡터, 행벡터가 모두 일차독립입니다.
  • ⇔ Ax=0은 자명한 해를 갖습니다.
  • ⇔ Ax=b는 유일한 해를 갖습니다.
  • ⇔ A는 가역이고 det(A) ≠ 0입니다.
  • ⇔ λ=0은 A의 고유값이 아닙니다.
  • ⇔ T는 전단사입니다.

결국 변환은 선형시스템의 해를 결정하는 것으로 다음 행렬 A에 의한 ℝ4의 정의역인 벡터 x가 0벡터로 변환하는 과정에서 다양한 해를 가집니다. 즉, 영벡터에 대응하는 x 벡터가 하나 이상인 경우로 공역과 치역이 같지만 일대일 반응이 아닌 전사입니다. 이 경우 모든 벡터 x는 A의 영공간의 스칼라배가 됩니다.

A=np.array([[0,4,-16,-2],[-5, 3, -22,3],[-15, 17, -98, 4]]);A
array([[  0,   4, -16,  -2],
           [ -5,   3, -22,   3],
           [-15,  17, -98,   4]])
b=np.array([[0],[0],[0]]); b
array([[0],
           [0],
           [0]])
au=np.hstack([A, b])
sp.Matrix(au).rref()
(Matrix([
     [1, 0,  2, 0, 0],
     [0, 1, -4, 0, 0],
     [0, 0,  0, 1, 0]]),
     (0, 1, 3))

위 기약행사다리꼴에 의하면 1개의 자유변수가 존재하며 이 값에 따라 다양한 해들이 존재합니다. 자유변수의 존재는 위 결합이 선형종속이므로 A가 기저행렬은 그 행렬의 영공간이 됩니다.

sp.Matrix(A).nullspace()
[Matrix([
     [-2],
     [ 4],
     [ 1],
     [ 0]])]

결과적으로 위 관계에서 정의역은 다음과 같이 나타낼 수 있습니다.

$$\text{any scalar}\begin{bmatrix}-2\\4\\1\\0\end{bmatrix}$$

댓글

이 블로그의 인기 게시물

유사변환과 대각화

내용 유사변환 유사행렬의 특성 대각화(Diagonalization) 유사변환(Similarity transformation) 유사변환 n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사하다고 하며 이 변환을 유사 변환 (similarity transformation)이라고 합니다. $$\begin{equation}\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B \end{equation}$$ 식 1의 유사 변환은 다음과 같이 고유값을 적용하여 특성 방정식 형태로 정리할 수 있습니다. $$\begin{align} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align}$$ 위 식의 행렬식은 다음과 같이 정리됩니다. $$\begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \t

matplotlib의 그래프 종류

1. 산포도(scatter plot) plt.scatter(x, y) >>> import matplotlib.pyplot as plt >>> import numpy as np >>> data=np.random.rand(1024, 2) >>> data[:3, :] >>> plt.scatter(data[:,0], data[:,1]) >>> plt.show() 2. 막대그래프(bar chart) plt.bar(x, hight, width, align='center') 매개변수중 width에 인수를 전달하여 막대의 두께를 조절할 수 있다. 또한 align의 인수는 'center'와 'edge' 이다. 기본값은 'center'이다. 이 값은 x축의 레이블이 막대의 중간에 위치(center) 또는 왼쪽 가장자리에 위치(edge)시킨다. 코드에서 np.random.randint 는 특정한 범위내에서 지정한 갯수의 랜덤수를 생성 np.unique(배열, retrun_counts=False, axis=None) : 객체 내의 중복되지 않은 수들을 반환한다. return_counts=True이면 각 수에 대한 빈도수를 반환한다. axis를 통해 행(1), 열(0)을 선택한다. >>> x=np.random.randint(1, 6, size=100) >>> uni,count=np.unique(x, return_counts=True) >>> uni array([1, 2, 3, 4, 5]) >>> count array([25, 17, 23, 16, 19], dtype=int64) >>> plt.bar(uni, count) >>> plt.show() 위의 막대그래프의 막대의

sympy.solvers로 방정식해 구하기

sympy.solvers로 방정식해 구하기 대수 방정식을 해를 계산하기 위해 다음 함수를 사용합니다. sympy.solvers.solve(f, *symbols, **flags) f=0, 즉 동차방정식에 대해 지정한 변수의 해를 계산 f : 식 또는 함수 symbols: 식의 해를 계산하기 위한 변수, 변수가 하나인 경우는 생략가능(자동으로 인식) flags: 계산 또는 결과의 방식을 지정하기 위한 인수들 dict=True: {x:3, y:1}같이 사전형식, 기본값 = False set=True :{(x,3),(y,1)}같이 집합형식, 기본값 = False ratioal=True : 실수를 유리수로 반환, 기본값 = False positive=True: 해들 중에 양수만을 반환, 기본값 = False 예 $x^2=1$의 해를 결정합니다. solve() 함수에 적용하기 위해서는 다음과 같이 식의 한쪽이 0이 되는 형태인 동차식으로 구성되어야 합니다. $$x^2-1=0$$ import numpy as np from sympy import * x = symbols('x') solve(x**2-1, x) [-1, 1] 위 식은 계산 과정은 다음과 같습니다. $$\begin{aligned}x^2-1=0 \rightarrow (x+1)(x-1)=0 \\ x=1 \; \text{or}\; -1\end{aligned}$$ 예 $x^4=1$의 해를 결정합니다. solve() 함수의 인수 set=True를 지정하였으므로 결과는 집합(set)형으로 반환됩니다. eq=x**4-1 solve(eq, set=True) ([x], {(-1,), (-I,), (1,), (I,)}) 위의 경우 I는 복소수입니다.즉 위 결과의 과정은 다음과 같습니다. $$x^4-1=(x^2+1)(x+1)(x-1)=0 \rightarrow x=\pm \sqrt{-1}, \; \pm 1=\pm i,\; \pm1$$ 실수