기본 콘텐츠로 건너뛰기

2월, 2022의 게시물 표시

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

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

적분방법

내용 부분적분 치환적분 적분방법 어떤 것을 적분하기 위해서는 그들을 적분할 수 있는 형태로 재구성하는 것으로부터 시작합니다. 이러한 재구성에는 다양한 방법들이 적용됩니다. 부분적분 식 1과 같이 미분의 곱법칙 을 적분에 적용할 수 있습니다. $$\begin{align}\tag{1}d(uv) &= u·dv + v·du\\ u·dv &= d(uv) - v·du\\ ∫u·dv &= \int d(uv) - \int v\,du\\ &= uv - ∫v·du + C\end{align}$$ 식 1에서 u는 정상함수, dv는 미분된 함수를 나타냅니다. 식 1은 식 2와 같이 부분적분 공식으로 정리할 수 있습니다. 부분적분 \begin{equation}\tag{2} \int {\large {[}}f(x)·g(x){\large {]}}dx = f(x) \int g(x)\, dx - \int \left[\frac{df(x)}{dx} \int g(x) \right] dx \end{equation} 부분 적분의 몇 가지 예제들을 계산해 봅니다. 예)   함수 w·sin(w)의 경우 직접 적분하기는 어렵지만 두 식의 곱으로 구성되어 있으므로 부분 적분을 적용할 수 있습니다. 즉, w를 원함수 u로 하고 sin(w)를 미분된 함수 dv라고 한다면 다음과 같이 전개할 수 있습니다. $$\begin{align} u = w,& \qquad \sin(w) = dv\\ \int \sin(w)\, dw &= -\cos(w)\\ &= v\\ \int w·\sin(w) \,dw &= w(-\cos(w)) - \int (-\cos(w))\, dw + C\\ &= -w·\cos(w) + \sin(w) + C \end{align}$$ 위 부분적분의 과정에 따라 코드를 작성해 보면 다음과 같습니다. import numpy a

회귀모델의 평가: 오차(Error, Residual), 회귀계수의 평가, 추정

내용 오차의 전제조건 오차의 등분산성 자기상관분석 오차제곱평균 회귀계수의 평가 모형의 평가 결정계수(coefficient of determinant) 추정 오차(Error, Residual) 오차의 전제조건 생성된 회귀모형을 통계적으로 검정(test)할 필요가 있으며 검정의 주요한 객체는 식 1에 의해 계산되는 관찰치와 추정치의 차이인 오차(error)가 됩니다. $$\begin{align}\tag{1}e&=y-(b-o+b_1x)\\&=y-\hat{y} \end{align}$$ 회귀모형의 오차는 다음의 전제조건을 가정합니다. 정규분포를 따르는 확률변수 독립변수들은 정규 분포를 따르는 확률변수이므로 그 반응변수와 추정치 사이에서 발생되는 오차 역시 정규분포를 따르는 확률 변수가 됩니다. 이것은 오차를 인위적으로 조정할 수 없다는 의미입니다. 오차항의 등분산성(homoscedastic) 시점이 다른 오차들 사이에 자기상관 (autocorrelation)을 가지지 않습니다. 이것은 오차들 간의 체계적인 관계가 없다는 것을 의미합니다. 그러나 현실 데이터 특히 시계열의 경우 각 데이터들 사이에 관계성을 가지기 때문에 이 가정이 부합하기는 쉽지 않습니다. 독립변수를 다양하게 적용하거나 lasso등의 방법을 사용하여 이 관계성을 감소시킬 수 있습니다. 오차의 등분산성 회귀모델은 다양한 형태로 구축할 수 있습니다. 예를 들어 그림 1과 같이 100개의 샘플을 가진 자료로부터 최소자승법에 의한 회귀모델을 중심으로 다른 모델들을 추가하여 5개의 회귀선을 임의로 작성하는 경우를 고려해봅니다. 한개의 데이터에 대해 다양한 회귀선들로부터 여러개의 추정치가 생성됩니다. 실측된 값과 추정치들간의 오차들 또한 확률분포를 구성할 수 있으므로 평균과 분산을 계산할 수 있습니다. 등분산성은 각 데이터로부터 계산되는 분산이 다른 데이터로부터 계산되는 값들과 같다는 것을 의미

등분산을 위한 검정

내용 Levene Test 등분산을 위한 검정 Levene Test Levene 테스트는 k 샘플(그룹)이 동일한 분산을 갖는지 테스트하는 데 사용됩니다. 각 표본의 분산이 같은 것을 등분산이라고 합니다. 일부 통계 테스트(예: 분산 분석)에서는 분산이 그룹 또는 샘플 간에 동일하다고 가정하며 회귀분석에서는 다양한 회귀모델들로 계산되는 오차 분포의 분산이 동일하다고 가정합니다. Levene 테스트를 사용하여 이러한 가정을 확인할 수 있습니다. Levene의 검정은 Bartlett 검정의 대안으로 Bartlett의 검정은 정규성 이탈에 민감하므로 Levene의 검정은 모집단 표본이 일반적으로 정규분포에 대한 가정이 불확실할 경우 선호됩니다. 그러나 데이터가 실제로 정규 분포 또는 거의 정규 분포에서 나왔다는 강력한 증거가 있다면 Bartlett의 검정이 더 나은 성능을 보입니다. Levene 검정의 귀무가설과 대립가설은 일반적으로 다음과 같이 기술할 수 있습니다. H0: σ 1 = σ 2 = … = σ k H1: k 표본 모집단 분산 중 하나 이상이 같지 않음 Levene 검정 통계량(W)은 식 2와 같이 정의됩니다. $$\begin{align}\tag{2}&W=\frac{N-k}{k-1}\frac{\sum^k_{i=1}n_i(Z_{i.}-Z_{..})^2}{\sum^k_{i=1}\sum^{n_i}_{j=1}(Z_{ij}-Z_{i.})^2}\\ &Z_i=\frac{1}{n_i}\sum^{n_i}_{j=1}Z_{ij}\\ &Z_{..}=\frac{1}{N}\sum^k_{i=1}\sum^{n_i}_{j=1}Z_{ij}\end{align}$$ k: 그룹의 수 n i : i번째 그룹에 속하는 샘플의 수 N: 총 샘플 수 Z ij : i번째 그룹의 j번째 관측값 Y ij 과 Ŷ i 의 L 1 norm입니다. Z ij 는 식 3과 같이 계산됩니다. $$\begin{equation}\tag{3}Z_{ij}

텐서연산: dot operation

내용 텐서 연산 요소별 연산 Tensor dot 텐서 연산의 기하학적 해석 텐서 연산(Tensor Operation) 텐서 연산 모든 컴퓨터 프로그램이 입력된 데이터를 이진수로 변환시켜 AND , OR , NOR 등의 이진 연산 과정을 거치는 것과 같이 신경망에서 학습한 모든 변환은 텐서에 적용된 소수의 텐서 연산이 실행 될 수 있습니다. 숫자 데이터의 예를 들어 텐서를 추가하거나 텐서를 곱하는 등의 작업이 가능합니다. 모델을 생성하기 위해 먼저 층(layer)을 구축합니다. tensorflow.keras의 모듈을 적용하여 층을 구축하는 대표적 방법은 다음과 같습니다. tf.keras.layers.Ddense(512, activation="relu") 이 층은 2D 텐서를 입력받아 2D를 반환합니다. 이 층에서 수행되는 함수는 다음과 같습니다. output=relu(dot(W, input)+b) 요소별 연산 입력 데이터 input과 가중치 W의 내적에 다른 벡터 b 사이의 덧셈 연산이 이루어지며 최종적으로 relu 연산 즉, 최대값을 반환하는 max(x, 0) 연산을 수행합니다. 위 연산에서 덧셈과 relu() 연산은 요소별 연산(Element-wise operation) 입니다. 즉, 고려 중인 텐서의 각 요소에 독립적으로 적용되는 연산입니다. 그러므로 대규모 병렬 구현에 매우 적합합니다. 임의의 두 배열 객체의 덧셈과 relu()함수의 연산은 다음과 같이 요소별로 이루어집니다. import tensorflow as tf from tensorflow import keras import numpy as np import pandas as pd from scipy import stats from sklearn import preprocessing import matplotlib.pyplot as plt x=np.array([[2, -6, 3],[6, 8, 7]]) y=np.array([[5, 1,

torch

내용 텐서란? 주요속성 Numpy에서 텐서 조작 차원의 변경 데이터 배치의 개념 (The notion of data batches) import tensorflow as tf from tensorflow import keras import numpy as np import pandas as pd from scipy import stats from sklearn import preprocessing import matplotlib.pyplot as plt 텐서(Tensor) 텐서란? 텐서는 숫자로 구성된 데이터의 컨테이너입니다. 즉, 숫자를 담는 그릇입니다. 가장 많이 접할 수 있는 2D 텐서인 행렬이 텐서의 예입니다. 결과적으로 텐서는 행렬을 임의의 수의 차원으로 일반화한 것으로 텐서의 맥락에서 차원(dimension)은 종종 축(axis)이라고 할 수 있습니다. tensorflow에서 텐서는 tf.constant() 함수에 의해 생성됩니다. 생성된 텐서의 값은 동일한 객체에서 변경, 수정 될 수 없습니다. 생성된 텐서의 타입은 tf.dtypes.DType 에서 확인 할 수 있습니다. 스칼라는 0차원 텐서이므로 축은 없습니다.(rank 0) 벡터는 1차원 텐서로서 1개의 축을 가집니다.(rank 1) 행렬은 2차원 텐서이며 2개 축을 가집니다.(rank 2) 3차원 텐서는 3개의 축을 가집니다.(rank 3) 계속 확장할 수 있습니다. rank0=tf.constant(4) rank0 <tf.Tensor: shape=(), dtype=int32, numpy=4 > rank1=tf.constant([2,3]) rank1 <tf.Tensor: shape=(2,), dtype=int32, numpy=array([2, 3], dtype=int32) > rank2=tf.constant([[1,2],[3,4],[5,6]]) rank2 <tf.Tensor: shape=(3, 2), dtyp

회귀분석(Regression analysis): 단순회귀분석

내용 회귀분석(Regression analysis)이란? 단순회귀분석 단순회귀모델 회귀모델에 의한 추정 회귀계수의 추정 최소자승법에 의한 회귀계수 회귀분석(Regression analysis) 회귀분석(Regression analysis)이란? 회귀분석은 변수들간의 관계에 대한 모형을 설정하고 그 모형을 통해 새로운 값을 추정하는 통계적 방법입니다. 그림 1은 일정한 높이(x)에 대응되는 힘(y)에 대한 그래프로서 x가 증가할수록 y가 증가하는 정확한 정비례 관계를 보여줍니다. 이 관계는 일반화되어 있는 물리법칙에 의한 자료를 기반으로 한 것으로 중력이 작용하는 지구내에서 일정한 높이에서 가해지는 힘을 충분히 예측할 수 있습니다. import numpy as np import pandas as pd from scipy import stats import matplotlib.pyplot as plt plt.figure(dpi=100) h=range(7) w=40 F=[w*9.8*i for i in h] plt.plot(h, F, "o-") plt.xlabel("Height(m)", size=13, weight="bold") plt.ylabel("Force(N)", size=13, weight="bold") plt.text(2.5, 1500, 'F=Wgh', color="blue", size=13, weight="bold") plt.text(0, -800, r'w:weight (kg), g: Gravity Acceleration($m/sec^2$)', color="blue", size=12) plt.xticks([]) plt.yticks([]) plt.show() 그림 1. 높이에 따른 힘의 변화. 그림 2는 x가 증가하면서

분산분석 (Analysis of variance)

내용 분산분석이란? ANOVA 이원분산분석(two-way anova) 분산분석 (Analysis of variance) 분산분석이란? 두 개 이상의 집단에서 각 집단내의 변동과 집단간 변동을 비교하여 모든 집단의 평균이 동일하다는 귀무가설을 검정하는 통계방법입니다. 두 개 집단의 가설검정을 위해 정규분포 또는 t 분포를 적용하였지만 그 이상의 집단을 비교하기 위해서는 집단 간의 변동성의 정도를 비교하는 F분포 를 사용합니다. 분산분석을 위한 자료는 비교 대상이 되는 명목변수인 요인변수(factor, 독립변수) 와 각 요인에 따른 값들 즉, 반응변수(respond variable, 종속변수) 로 구성됩니다. 각 요인은 몇 개의 소집단으로 분류될 수 있으며 이 소집단의 요인들을 처리(treatment, 요인수준) 라고 합니다. 요인 수준에 대응하는 반응변수가 한 개인 경우의 분석을 일원분산분석(one-way anova) 라고 하며 여러 개인 경우를 다변량분산분석(manova) 라고 합니다. 이 글에서는 일원분산과 이원분산분석을 소개합니다. 이 분석들이 다변량분석의 토대가 될 수 있을 것입니다. 분산분석의 귀무가설은 다음과 같습니다. H0: μ 1 = μ 2 = … = μ n 분산분석을 위해 다음을 가정합니다. 각 모집단은 정규분포를 따릅니다. 모든 모집단의 분산은 동일합니다. 관측치들은 독립적이어야 합니다. ANOVA 표 1에서 나타낸 것과 같이 one-way ANOVA는 factor와 treatment의 구별이 없습니다. 그러므로 treatment가 설명변수가 되고 여러 변수들의 차이를 분석합니다. 표 1. 일원분산분석을 위한 자료구조 처리 1 2 … t 샘플 x 11 x 12 … x 1t x 21 x 22 … x 2t &vellip; &vellip; &dtdot; &vellip; x n1 x n2 … x nt 평균 $\bar{X_1}$