기본 콘텐츠로 건너뛰기

라벨이 pytorch인 게시물 표시

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

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

자동미분(Autograd)

내용 torch.autograd requires_grad 설정 변화도(Gradient) 계산하기 변화도 추적 멈추기 자동미분(Autograd) torch.autograd 신경망은 설정한 층들을 통과하면서 feature와 label의 관계를 적합하게 설명하는 모델을 구축합니다. 이 과정을 학습(train)이라고 하며 이 학습은 다음과 같이 두 단계로 구성됩니다. $$X \rightarrow \left(\begin{aligned}\color{blue}{W\cdot x+b \rightarrow \hat{y}(\text{forward})}\\\uparrow \qquad\qquad \qquad \downarrow\\\color{red}{\frac{dw}{dx}, \frac{db}{dx}(\text{backward})}\end{aligned} \right)\rightarrow \hat{Y}$$ 위 식에서 W, b는 각각 가중치와 편향입니다. 위의 역전파(backward) 단계서는 순전파(forward)에서 생성된 가중치와 편향에 의한 추정치 $\hat{y}$와 실제값인 label(Y)와의 오차(error)를 계산하고 그 값에 대한 가중치와 편향을 평가(변화도, 미분)하여 그 매개변수(W, b)를 조절합니다. 이 조절을 매개변수의 업데이트(update)라고 하며 그 차이가 최소 또한 변화가 없을 수준까지 이 과정은 반복합니다. 이 과정은 최적화(optimization)라고 하며 그 결과가 최종의 모델이 됩니다. pytorch에서 torch.autograd 는 역전파시 실행되는 미분과정을 담당하는 자동미분엔진입니다. autograd는 데이터(텐서)의 실행된 모든 연산들(연산 결과가 새로운 텐서인 경우도 포함하여)의 기록을 Function 객체로 구성된 방향성 비순환 그래프(DAG; Directed Acyclic Graph)에 저장(keep)합니다. 그림 1과 같이 방향성 비순환 그래프

Sequential Data에 LSTM 적용

내용 시퀀스 데이터(Sequential Data) 전통적 신경망의 한계 RNN Long Short Term Memory (LSTMs) 적용 Sequential Data에 LSTM 적용 시퀀스 데이터(Sequential Data) 시퀀스 데이터는 데이터가 나열되어 있는 순서에 중요한 의미가 부여됩니다. 몇 가지 일반적인 유형의 순차 데이터를 예제와 함께 살펴보겠습니다. Language data 또는 a sentence 예를 들어 “My name is Ahmad”의 문장을 “Name is my Ahmad”와 같이 단어의 순서를 바꾼다면 성립하지 않습니다. 즉, 단어들의 순서가 문장의 의미를 전달하는 데 중요한 요소이기 때문에 순차 데이터입니다. Time Series Data 예를 들어, 회사 A의 연간 주식 시장 가격과 같은 종류의 데이터는 연도별로 확인하고 순서와 추세를 찾아야 합니다. 연도의 순서는 변경할 수 없습니다. Biological Data 예를 들어, DNA 서열은 순서대로 유지되어야 합니다. 관찰하면 시퀀스 데이터는 우리 주변 어디에나 있습니다. 예를 들어 오디오를 음파, 텍스트 데이터 등의 시퀀스로 볼 수 있습니다. 이것들은 순서를 유지해야 하는 시퀀스 데이터의 몇 가지 일반적인 예입니다. 전통적 신경망의 한계 다음의 단순한 신경망을 생각해 봅니다. plt.figure(dpi=100) font1={'family':'nanumgothic', 'size':12, 'weight':'bold'} plt.scatter([1, 2], [1, 1], s=200) plt.annotate("", (1,1), (2,1),arrowprops=dict(color="blue", arrowstyle="-")) plt.text(1, 0.99, 'Input Lay

장단기메모리(LSTM)

RNN의 작동구조 LSTM의 작동구조 입력게이트 삭제게이트 셀상태(장기상태) 출력게이트와 은닉상태(단기상태) 이 글은 " Understanding LSTM Networks "와 " 장단기 메모리(Long Short-Term Memory, LSTM) "를 참고하여 작성하였습니다. LSTM(Long Short-Term Memory) 바닐라RNN: 기본적인 순환신경망으로 비교적 짧은 시퀀스에서만 효과를 보이는 단점이 있습니다. 현재의 은닉층은 현재의 입력과 이전의 은닉상태를 입력받아 계산합니다. 이 과정에서 초기에 계산된 정보(은닉상태)의 영향은 시간단계가 길어지면서 감소됩니다. 초기 시점이 현시점과 충분히 길다면 그 영향은 거의 의미가 없을 수 있습니다. 이러한 단점을 극복하기 위한 다양한 RNN의 변형이 등장하게 되었으며 LSTM(장단기 메모리, Long Short-Term Memory) 역시 그 중의 하나입니다. RNN의 작동구조 다음 그림과 같이 현시점 은닉층(rnn 셀)에서는 현 시점의 입력벡터(x t )와 직전 시점에서의 은닉상태(h t-1 )의 결합의 결과를 tanh()에 의한 비선형화한 결과 즉, 업데이트된 은닉상태(h t )를 새로운 가중치(W y )로 사용하여 출력(y t )을 반환하고 다음 시점의 은닉층으로 전달됩니다. h t = tanh(W x x t + W h h t-1 +b) 그림 1. RNN의 작동구조 LSTM의 작동구조 그림 2. LSTM의 구조 위 lstm 구조의 그림에서 셀 상태(C t )는 이전 시점의 셀상태(C t-1 )의 입력으로 구성됩니다. 여기에 삭제게이트와 입력게이트 그리고 출력게이트가 첨가되어 다음 셀로 전달됩니다. 이 세개의 게이트에 공통적으로 시그모이드(sigmoid, σ) 함수가 적용됩니다. 이 함수는 [0, 1]사이의 값을 반환함으로서 게이트를 조절합니다.

torch.nn 클래스와 신경망모형

내용 layer building 비선형과 다중 모델 layer building 선형모델의 layer는 nn.Linear 클래스를 사용하여 구축합니다. nn.Linear에 대한 생성자는 입력 특성의 수(feature #), 출력의 수(label #), 선형 모델에 편향이 포함되는지 여부(여기서 기본값은 True)의 세 가지 인수를 허용합니다. nn.Linear(input_size, output_size, bias=True) True는 default import numpy as np import torch import torch.nn as nn x=torch.rand((3, 1)) x tensor([[0.9445], [0.1129], [0.4799]]) model=nn.Linear(1,1) model(x) tensor([[0.2996], [0.5595], [0.4448]], grad_fn=< AddmmBackward >) 위 코드는 torch.nn 클래스 객체(model)를 생성한 것입니다. 그 모델의 인수로서 입력인자 x를 전달한 과정입니다. 신경망에서 순전파(forward)과정입니다. 일반적으로 클래스는 model.forward(x)와 같이 그 클래스의 메서드를 호출한 후 사용합니다. 그러나 위의 경우는 메소드의 호출 과정이 생략되었습니다. 오히려 메소드의 호출은 에러를 발생합니다. y=model.forard(x) : Error 발생 y=model(x) : Right 이것은 nn 클래스에 포함된 __call__ 특벌메소드에 기인합니다. 이 메소드는 지정된 클래스 객체를 자동으로 호출하게합니다. 생성된 모델의 매개변수(들)은 model.parameters() 클래스를 사용하여 호출할 수 있습니다. 또는 가중치와 편차를 각각 wight , bias 속성을 사용하

다층퍼셉트론(Multilayer Perceptron)

내용 다층 퍼셉트론(Multilayer perceptron)이란? custom layer의 생성 저장과 호출 주식자료에 적용 다층 퍼셉트론(Multilayer perceptron) 다층 퍼셉트론(Multilayer perceptron)이란? 가장 단순한 심층 네트워크를 다층 퍼셉트론(multilayer perceptron, mlp) 원시 데이터의 입력층(input layer) &rarrow; 1개 이상의 은닉층(hidden layer) &rarrow; 마지막 결과 출력층(output layer) 첫 입력층의 결과부터 이전 층의 결과는 다음 층의 입력이 되므로 모든 층들이 밀접하게 연결된 구조이므로 입력 데이터에 국한된 결과를 나타낼 가능성이 증가합니다. 즉, 과적합(over-estimate), 과소적합(under-estimate) 등에 대한 위험성이 증가되므로 그들에 대한 평가와 적절한 모델 선택이 중요합니다. 이러한 문제를 해결하는 데 도움이 되도록 가중치 감소 및 드롭아웃과 같은 정규화 기술들이 사용됩니다. 레이블(반응변수)이 아핀 변환(선형변환)에 의해 입력 데이터(특성, feature)와 관련되어 있다면 이 접근 방식으로 충분할 수 있지만 선형변환은 항상 증가 또는 감소의 변화만을 나타냅니다. 예를 들어 개인이 대출을 상환할지 여부를 예측하려는 경우 다른 모든 조건이 동일할 때 소득이 높은 신청자가 소득이 낮은 신청자보다 항상 상환할 가능성이 더 높다고 합리적으로 상상할 수 있습니다. 단조롭지만 이 관계는 상환 가능성과 선형적으로 연관되지 않을 가능성이 높습니다. 소득이 0에서 50,000으로 증가하면 100에서 105만으로 증가하는 것보다 상환 가능성이 더 크게 증가할 가능성이 높습니다. 이를 처리하는 한 가지 방법은 소득의 로그를 특성으로 사용하여 선형성이 더 명확해지도록 데이터를 전처리하는 것일 수 있습니다. 그러나 이러한 선형변환의 단조성은 여러 층들을 구성하는 것과 단일 층

데이터 분석을 위한 금융자료 I

내용 결측치 조정 표준화 tensor 형으로 전환 batch sample 생성 주가가료 FinanceDataReader 모듈을 사용하여 다양한 금융자료를 호출할 수 있습니다. 이 호출된 자료는 pandas.DataFrame 형으로 분석 툴에 적합한 자료형으로 변환이 필요합니다. 다음은 kospi에 대한 자료를 호출한 것입니다. import FinanceDataReader as fdr st=pd.Timestamp(2000,1, 1) et=pd.Timestamp(2021, 12, 27) data=fdr.DataReader("KS11", st, et) data.tail(3) Close Open High Low Volume Change Date 2021-12-23 2998.17 2998.02 3000.70 2980.91 483840000.0 0.0046 2021-12-24 3012.43 3009.48 3025.77 3009.48 537550000.0 0.0048 2021-12-27 2999.55 3013.94 3017.31 2999.30 462900.0 -0.0043 위 결과와 같이 호출된 주가자료를 Close, Open, High, Low, Volume, Change(종가, 시가, 고가, 저가, 거래량, 변화율)등으로 구성되어 있습니다. 위와 같은 지수와 개별종목의 경우 가격의 순서에서 차이가 납니다. 예를 들어 삼성전자의 경우 변수의 나열순서가 시가, 고가, 저가, 종가, 거래량, 변화율 순으로 나타냅니다. 이러한 차이는 이후 자료의 조정에서 유의되어야 할 부분입니다. 위 자료중 change는 전날 거래 종료 이후에 일어나는 거래의 변화를 나타냅니다. 위 자료를 기반으로 하는 분석자료는 다음과정을 통해 이루어집니다. 물론 이 과정은 유연한 것이며 다른 방법으로 대체할 수 있습니다. 다음 과정은 4번 이후

활성함수

내용 시그모이드함수(Sigmoid function) ReLU 함수 하이퍼볼릭탄젠트함수 활성함수(activation function) 활성함수는 가중치 합계를 계산하고 여기에 편향을 추가하여 뉴런의 활성화 여부를 결정합니다. 즉, 이 함수를 통과하면서 선형함수의 결과를 비선형으로 전환됩니다. 선형함수는 입력과 출력사이에 상수배의 관계를 의미합니다. 즉, 동일한 변화를 가지는 것으로 직선의 형태를 보이지만 비선형은 직선으로 표시할 수 없습니다. 선형함수의 반복은 그 관계를 변화시킬 수 없으므로 입력 층에 대한 신호의 변화를 명확히 하기 위해 비선형 함수 즉, 활성함수를 사용하여야 합니다. 결과적으로 활성화 함수는 미분가능한 비선형 결과를 반환합니다. 활성화함수는 다양한 종류가 있으며 그 중 일반적으로 사용하는 몇 가지를 살펴보면 다음과 같습니다. 시그모이드함수(Sigmoid function) 시그모이드 함수는 식 1과 같으며 모든 값은 (0, 1) 구간내로 변환합니다. $$\begin{equation}\tag{1} \begin{aligned}&\text{sigmoid} ;\\ & f(x)=\frac{1}{1+\exp(-x)} \end{aligned} \end{equation}$$ 인공 뉴런은 임계값을 기준으로 활성화 여부를 결정합니다. 입력이 임계값을 초과할 때 값 1을 취하고 반대의 경우는 0을 취합니다. 딥러닝은 그라디언트 기반 학습으로 임계값 단위에 대한 매끄럽고 미분 가능한 근사값의 출력이 가능하여야 합니다. 시그모이드 함수는 이러한 조건을 충족하는 함수입니다. 그러나 입력이 0에 가까울 때 시그모이드 함수는 선형 변환에 접근합니다. x=torch.arange(-10, 10, 0.001, requires_grad=True) y=torch.sigmoid(x) plt.plot(x.detach().numpy(), y.detach().numpy()) plt.xlabel("x&quo

Classification과 softmax

내용 Classification Softmax 비용함수 적용 Classification 일반적인 분류 문제는 클래스 간의 순서는 의미를 담지 않습니다. 단지 분류만을 목적으로 하는 경우가 많습니다. 그러나 분석을 위해서는 이러한 데이터를 수치로 변환하여야 합니다. one-hot coding은 이러한 목적에 부합합니다. 즉, 이 방법은 카테고리 수만큼 구성 요소가 있는 벡터입니다. 특정 인스턴스의 카테고리에 해당하는 구성 요소는 1로 설정되고 다른 모든 구성 요소는 0으로 설정됩니다. 예를들어 데이터의 라벨이 cat, dog, chicken의 세 카테고리로 구성되어 있다면 원-핫인코딩은 다음과 같이 나타낼 수 있습니다. cat dog chicken cat 1 0 0 dog 0 1 0 chicken 0 0 1 그러므로 라벨 y의 집합은 다음과 같이 나타낼 수 있습니다. y &in; {(1,0,0), (0,1,0), (0,0,1)} Softmax 다음 그림은 regression과 classification의 신경망을 나타낸 것입니다. 위 그림은 4개의 feature를 가진 데이터에서 회귀(regression)은 한개의 출력, 분류(classfication)의 경우 3개의 출력을 가지는 경우입니다. 회귀의 경우 4개의 가중치를 가지지만 분류의 경우 각 feature에서 각 출력 카테고리에 대한 가중치를 가지므로 총 4 × 3 =12개의 가중치를 가집니다. 이를 수식으로 나타내면 다음과 같습니다. $$\begin{align}\tag{1}& o_1=x_1w_{11}+x_2w_{12}+x_3w_{13}+x_4w_{14}+b_1\\&o_2=x_1w_{21}+x_2w_{22}+x_3w_{23}+x_4w_{24}+b_2\\&o_3=x_1w_{31}+x_2w_{32}+x_3w_{33}+x_4w_{34}+b_3\\