기본 콘텐츠로 건너뛰기

라벨이 numpy인 게시물 표시

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

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

정규분포 그리기

정규분포 (Normal Distribution) 평균이 $\mu$이고 표준편차 $\sigma$인 연속확률변수 x의 확률밀도함수가 다음과 같다면 정규분포를 따릅니다. $$f(x) = \frac{1}{\sigma \sqrt{2 \pi}}\exp\left(-\frac{1}{2}\left[\frac{x-\mu}{\sigma}\right]^2\right), \quad -\infty \lt x \lt \infty $$ import numpy as np import pandas as pd from sympy import * import matplotlib.pyplot as plt sympy를 사용 x,m,s=symbols('x, mu, sigma') fn=1/(s*sqrt(2*pi))*exp(-Rational(1,2)*((x-m)/s)**2) simplify(fn) $\frac{\sqrt{2} e^{- \frac{\left(\mu - x\right)^{2}}{2 \sigma^{2}}}}{2 \sqrt{\pi} \sigma}$ fig, ax=plt.subplots(1, 2, figsize=(15, 4)) a=np.linspace(-6, 6, 100) for j in [-2, 0, 2]: b=[float(fn.subs({x:i, m:j, s:1})) for i in a] ax[0].plot(a, b, label='['+r'$\mu:$'+str(j)+','+r'$\sigma:$'+str(1)+']') ax[0].legend(loc='best') ax[0].set_xlabel("x", size=12, weight="bold") ax[0].set_ylabel("f(x)", size=12, weight="bold") ax[0].spines['left'].set_pos

선형변환(Linear transformation)

내용 선형변환 변환 영변환과 항등변환 표준기저 특별한 선형변환 동일차원으로 선형변환의 경우 일정각도의 이동 선형변환(Linear transformation) 선형변환 선형변환(Linear transformation, T: U → V)은 어떤 벡터 공간의 U를 다른 벡터 공간 V로 옮기는 함수입니다. 이러한 함수는 식 6.1를 만족해야 합니다. $$\begin{align}\tag{1} &\forall \; \text{u}_1,\; \text{u}_2 \in \text{U} \rightarrow T(\text{u}_1 + \text{u}_2) = T(\text{u}_1)+T(\text{u}_2)\\ &\forall \; \text{u} \in \text{U} \cap α \in \text{C} \rightarrow T(\alpha \text{u}) = \alpha T(\text{u}) \end{align}$$ 위 식에서 U와 C는 각각 벡터와 스칼라입니다. 식 1은 벡터들의 선형결합 의 조건과 같습니다. 즉, 선형결합이 성립되는 벡터들은 선형 변환이 가능하다는 것을 의미합니다. 예)  다음 식이 선형변환인지를 결정합니다. $$\begin{align}&T\left( \begin{bmatrix} x_1\\x_2\\x_3 \end{bmatrix}\right)=\begin{bmatrix} 2x_1+x_3\\-4x_2\end{bmatrix}\\ &A=\begin{bmatrix} 2&0&1\\0&-4&0 \end{bmatrix} \end{align}$$ 정의역의 x 1 , x 2 , x 3 에 대한 위 변환이 성립되면 변환의 결과(T 1 , T 2 )에 대한 행렬방정식은 다음과 같습니다. $$Ax = T \right

변환(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{

마코브 체인(Markov Chains)

내용 확률행렬의 조건 마코브 체인(Markov Chains) Andrey Markov의 이름을 딴 Markov 체인은 한 "상태"(상황 또는 값 집합)에서 다른 "상태"로 이동하는 수학적 시스템입니다. 예를 들어, 아기의 행동에 대한 Markov 체인 모델을 만든 경우 "놀기", "먹기", "자고 있음" 및 "울음"을 상태로 포함할 수 있으며 다른 행동과 함께 상태 공간 (state space)을 형성할 수 있습니다. 또한, 상태 공간의 맨 위에 있는 Markov 체인은 한 상태에서 다른 상태로의 "전환" 확률을 알려줍니다. 예를 들어 현재 놀이 중인 아기가 다음 상태에서 먼저 울지 않고 5분이내에 잠들 확률을 계산할 수 있습니다. 그림 1. 위 그림은 두 개의 상태(A 및 B)가 있는 경우로 4개의 가능한 전환이 있습니다(상태가 다시 자체로 전환될 수 있기 때문에 2가 아님). 우리가 'A'에 있으면 'B'로 전환하거나 'A'에 머무를 수 있습니다. 'B'에 있으면 'A'로 전환하거나 'B'에 머무를 수 있습니다. 이 두 상태 다이어그램에서 어떤 상태에서 다른 상태로 전환될 확률은 0.5입니다. 상태의 전환을 나타내기 위해 위의 Markov 체인 다이어그램 대신에 다음과 같은 전환행렬을 사용합니다. 이 행렬은 상태 전환의 확률을 즉, 전환확률을 계산하기 위해 사용합니다. A B A P(A|A):0.5 P(B|A):0.5 B P(A|B):0.5 P(B|B):0.5 이와 같은 마코브 체인은 생물학, 비즈니스, 화학, 공학, 물리학 등 다양한 상황에 적용되는 수학적 모델로서 동일한 방식으로 여러 번 수행되는 실험 또는 측정을 설명하는 데 사용됩니다. 여기서 각 시도(trial)의

신경망의 구성과 binary classification

내용 layers: the building blocks of deep learning Binary classification example: IMDB 데이터 준비 신경망 구축 학습시 모델 검증과 예측 이 글은 "Deep Learning with Python"의 3.4 절의 내용입니다. 신경망의 구성과 binary classification 신경망 훈련은 다음 객체를 중심으로 이루어집니다. Layers: 네트워크(또는 모델)로 결합되는 계층 입력 데이터 및 해당 대상 학습에 사용되는 피드백 신호를 정의하는 손실 함수 학습 진행 방법을 결정하는 옵티마이저 다음과 같이 상호 작용을 시각화할 수 있습니다. 함께 연결된 레이어로 구성된 네트워크는 입력 데이터를 예측에 매핑합니다. 그런 다음 손실 함수는 이러한 예측을 목표와 비교하여 손실 값을 생성합니다. 네트워크의 예측이 예상과 얼마나 잘 일치하는지 측정합니다. 옵티마이저는 이 손실 값을 사용하여 네트워크의 가중치를 업데이트합니다. layers: the building blocks of deep learning from keras import layers layer=layers.Dense(32, input_shape=(784,)) layer <keras.layers.core.dense.Dense at 0x7f9f7ed824d0> 첫 번째 차원이 784인 입력 2D 텐서로만 받아들이는 레이어(배치 차원인 축 0은 지정되지 않았으므로 모든 값이 허용됨)로 이 레이어는 첫 번째 차원이 32로 변환된 텐서를 반환합니다. 그러므로 다음 레이어의 입력 단위는 32 차원이어야 합니다. Keras를 사용할 때 모델에 추가하는 레이어가 들어오는 레이어의 모양과 일치하도록 동적으로 만들어지기 때문에 호환성에 대해 걱정할 필요가 없습니다. 예를 들어 다음을 작성한다고 가정합니다. from kera

직교벡터(Orthogonal vectors)와 정사영(Projection)

내용 직교벡터(Orthogonal vectors) 정사영(Projection) 직교벡터와 정사영 직교벡터(Orthogonal vectors) 두 벡터의 내적 과 사잇각은 식 1과 같이 계산됩니다. $$\begin{align}\tag{1} &u \cdot v=\parallel{u}\parallel \parallel{v}\parallel \cos(\theta) \\ & \cos(\theta) =\frac{u \cdot v}{\parallel{u}\parallel \parallel{v}\parallel} \end{align}$$ 식 1에 의하면 두 벡터가 직각 을 이루는 경우 내적은 0가 됩니다. 이러한 벡터를 직교벡터 (Orthogonal vectors)라 합니다. 그림 1은 벡터 u와 v와 벡터 u와 -v는 모두 직각관계를 나타냅니다. 즉, 벡터 v에 수직인 벡터 u는 다음의 조건을 만족합니다. $$\parallel{u-v}\parallel=\parallel{u-(-v)}\parallel$$ import numpy as np import numpy.linalg as la import sympy as sp import matplotlib.pyplot as plt a, u, uNeg, v=[0,0], [3,0], [-3,0], [0,3] col=['blue','red','green'] nme=['u', '-u','v'] plt.figure(dpi=100) for i, j in enumerate([u, uNeg, v]): plt.arrow(a[0], a[1], j[0]-a[0], j[1]-a[1], width=0.05, color=col[i], label=nme[i]) plt.arrow(uNeg[0],uNeg[1], v[0]-uNeg[0],v[1]-uNeg[1], linestyle='--

벡터 연산

내용 노름과 단위벡터(Norm and Unit Vector) 행렬노름 조건수(Condition Number) 벡터들의 연산 덧셈과 뺄셈, 그리고 스칼라 배 내적(Inner product) 코쉬-슈바르츠 부등식 (Cauchy-Schwarz inequality) 삼각부등식(Triangle inequality) 벡터 연산 노름과 단위벡터(Norm and Unit Vector) 식 1과 같이 벡터들 사이에서 계산된 거리(D)를 norm(노름) 또는 유클리드 거리 (Euclidean distance)라 하고 $\parallel{x}\parallel$로 나타냅니다. $$\begin{equation}\tag{1}\text{D}=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2+\cdots}\end{equation}$$ 예를 들어 x, y, z 축을 가지는 3차원의 벡터 a의 크기(노름, norm)는 벡터 b를 기준으로 식 2와 같이 계산됩니다. $$a=\begin{bmatrix} a_1\\a_2\\a_3\end{bmatrix}, \quad \ b=\begin{bmatrix} b_1\\b_2\\b_3\end{bmatrix}$$ $$\begin{equation}\tag{2}\parallel{x}\parallel=\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+(a_3-b_3)^2}\end{equation}$$ 물론 시점을 명시하지 않을 경우는 원점(0,0,0)으로 간주합니다. 노름 계산을 위해 np.linalg.norm(x) 함수를 사용할 수 있습니다. 이 함수는 numpy의 하위 모듈인 linalg에 포함된 함수이므로 아래 코드와 같이 numpy.linalg를 장착(import)하여 사용합니다. 또한 결과를 소수점 이하의 일정한 자리에서 반올림으로 나타내기 위해 np.around() 함수를 적용하였습니다

경사하강법(Descent Gradient)

내용 경사하강법이란? 경사하강법 알고리즘 경사하강법(Descent Gradient) 경사하강법이란? 최소자승법은 공식화된 계산식에 의해 결정된 회귀계수 를 적용합니다. 이에 반면에 경사하강법은 수치적으로 모델을 최적화하는 과정에서 회귀계수를 산출합니다. 식 1의 선형회귀모형은 독립변수(x)와 종속변수(y)의 사이의 다음의 선형식을 만족하는 최적의 회귀계수를 결정하는 것입니다. $$\begin{align}\tag{1}&y=xW\\&W:\text{회귀계수(가중치)}\end{align}$$ 예를 들어 다음의 자료는 y=2x를 만족하는 인위적으로 생성한 데이터입니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt import sympy as sp x=np.arange(0, 10).reshape(-1,1) y=x*2 x.shape, y.shape ((10, 1), (10, 1)) np.c_[x, y] array([[ 0, 0], [ 1, 2], [ 2, 4], [ 3, 6], [ 4, 8], [ 5, 10], [ 6, 12], [ 7, 14], [ 8, 16], [ 9, 18]]) 역으로 위 자료의 선형회귀 모델을 생성한다고 할 경우 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차 곡선의 형