기본 콘텐츠로 건너뛰기

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

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

신경망의 개요

생물학적 뉴런(biological neuron)은 아래의 그림과 같이 구성되어 있다.
수상돌기: 인접한 뉴런의 정보를 수집
세포핵: 수집된 정보를 바탕으로 해당 세포의 고유값을 생성
축색돌기: 생성된 고유값을 다른 세포들에게 제공
시냅스: 축색돌기 말단과 이웃한 뉴런의 수상돌기가 연결된 지점. 인간의 두뇌에서의 대부분의 지적 기능은 이들 시냅스에 저장된 정보가 지배

일정한 값이 시냅스를 통해 조절되고 수상돌기에 의해 입력된다. 이 입력된 신호는 어느 정도(임계치)이하 이면 단순히 저장된다. 그러나 임계치 이상이 되면 세포의 활성화를 일으켜 축색을 통해 이동한다. 즉, 출력된다.이러한 과정을 신경망 이론에 사용하기 위한 알고리즘으로 만들어 내기 위해서는 입력으로 부터 입력강도의 조절, 계산, 출력의 단계를 각각 고려하여 모델을 설정할 필요가 있다.
위의 그림은 하나의 신경세포이고 이 들의 연결고리에 해당하는 것을 시냅스(synapse)라고 한다.


고리즘  
위 그림은 단순하게 다음과 같은 수학적 모형으로 표현이 가능하다.

$$
u=\sum^n_{i=1} w_ix_i
\begin{cases}
\phi(u)=1, & \text{if} \, u \geq \theta\\
0,   &\text{otherwise}
\end{cases}
$$

n개의 입력치들의 각각에 가중치를 고려하여 받아들이도록 정의함으로서 각 입력의 강도를 조정한다. 이것은 신경포의 관계에서 시냅스에 의한 입력의 강도와 같은 기능을 모형화한 것이다. 이렇게 가중치가 고려된 모든 입력값들의 합이 연산이 실행되는데 활성화함수(activation function)라고 하는 $\phi(u)$  에 의해 실행된다. 그 결과는 다음 신경세포로 전달된다.
인공뉴런에서 주로 사용되는 활성화 함수는 다음과 같다.
sign: $f_g(z)=\begin{cases}+1, & z \ge 0 \\ -1, & z>0 \end{cases}$
sigmoid: $f_s(z)= \frac{1}{1+e^{-z}}, \; 0 \le f\le 1$
tanh: $f_t(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}, \; -1 \le f \le 1$
ReLU: $f_r(z)=\text{max (0, z)},\; 0 \le f \le \infty$

이 활성화함수를 선택하는 것이 중요합니다. 다음은 주요하게 사용되는 활성화 함수들의 정의와 그래프입니다.
>>> x=np.arange(-10, 11)
>>> y=[]
>>> y1=[]
>>> for i in x:
           if i >= 0:
                y.append(1)
                y1.append(1)
        else:
                y.append(0)
                y1.append(-1)
>>> plt.plot(x, y) # 계단함수
>>> plt.plot(x, y1) #부호함수
>>> plt.show()
다음 그림의 파란색이 계단함수, 주황색이 부호함수

#선형함수
>>> plt.plot(x, x)
>>> plt.show()


#시그모이드 함수
 >>> y2=1/(1+np.exp(-x))
>>> plt.plot(x, y2)
>>> plt.show()


#하이퍼 탄젠트 함수
 >>> y3=(np.exp(x)+1)/(np.exp(x)-1)
>>> plt.plot(x, y3)
>>> plt.show()


#ReLU 함수
>>>  y4=[]
>>> for i in x:
            y4.append(max(0, i))
>>> plt.plot(x, y4)
>>> plt.show()

신경망 이론에서 주요한 3가지 요소들이 위의 그림들과 같은 활성화함수, 신경망 구조, 학습알고리즘이다.

위에서 언급한 것과 같이 신경망 구조의 하나의 단위는 입력--> 연산 --> 출력을 담당하는 입력층(input layer)과 출력층(output layer) 그 사이에 연산을 담당하는 은닉층(hidden layer)로 구성된다. 이들이 어떠한 구조로 배치되는가가 신경망 이론의 중요한 부분이다.

위 그림과 같이 정보의 전달은 한방향으로 진행된다. 외부로 부터 입력층을 통해 정보가 투입되고 은닉층에서 학습(연산)이 이루어지고 그 결과를 출력층을 통해 외부로 전달된다.
입력층과 출력층은 단층으로 존재하지만 은닉층은 여러층으로 구성될 수 있다. 이러한 구조를 전방향신경망(feed forward neural network)이라고 합니다. 이외에도 많은 구조가 있습니다.

이러한 구조를 유지하면서 입력된 정보는 어떤 방식으로 연산 즉, 학습될까?
입력된 정보는 위에서 소개한 활성화 함수에서 연산되는데 중요하게 작용하는 것이 가중치이다. 그러므로 가중치를 설정하는 것에 의해 이후의 연산의 결과가 달라질 수 있다. 결과적으로 신경망 학습은 가중치 변화를 적절한 값으로 최적화 시키는 과정이라 할 수 있다. 이를 신경망 학습알고리즘이라 한다. 대부분의 학습알고리즘은 한 번의 수행으로 최적해를 찾을 수 없고 반복적인 수행을 통해 점차적으로 최적값을 갖도록 가중치를 수정하는 과정을 갖는다. 가중치를 수정하는 식은 다음과 같이 수식으로 표현할 수 있다.
$$ w(\tau +1) = w(\tau) + \delta w(\tau)$$
현시점 $\tau$에서의 가중치 $w(\tau)$가 새로운 가중치$w(\tau+1)$로 변화될때의 변화량$\delta w(\tau)$을 결정하는 방식은 학습 알고리즘 별로 다양하다.
여기서 학습알고리즘은 크게 지도학습(supervised learning)과 비지도학습(unsupervised learning)으로 구분할 수 있다.

아주 단순히 생각하면 이것의 기본 frame은 함수이다.

 x---> f(x) ---> y
입력 x에 대해 어떤 함수를 적용하여 결과 y를 산출하는 것이다. 이 과정에서 입력단에서 입력자들에 가중치를 적용하여 f(x)의 연산의 인자로 작용되는데 이 함수는 모든 인자에 대해 작용되는 것이 아니라 사전에 정의된 임계점 이상일 경우 수행된다. 결과적으로 최적의 가중치를 찾는 모형이 신경망의 중요한 부분이다.

댓글

이 블로그의 인기 게시물

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() 위의 막대그래프의 막대의

유사변환과 대각화

내용 유사변환 유사행렬의 특성 대각화(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

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$$ 실수