본문 바로가기
BoostCamp AI Tech - U Stage

BoostCamp AI Tech - Day09

by getamped 2021. 1. 28.

오늘은 Pandas를 좀 더 다루고 확률론 입문을 다뤄봤다. 

 

1. Group by

- SQL groupby명령어와 같음

-> SQL과 마찬가지로 한 개이상의 column을 묶을 수 있다.

- split->apply->combine

- 과정을 거쳐 연산함

- Groupby 명령의 결과물도 결국은 dataframe

- 두 개의 column으로 groupby를 할 경우, index가 두개 생성

 

- unstack : Group으로 묶여진 데이터를 matrix 형태로 전환해줌

- swap level : Index level을 변경할 수 있음

- Index level을 기준으로 기본 연산 수행 가능(sum 등)

 

2. Pivot table

- Index 축은 groupby와 동일함

- Column에 추가로 labeling 값을 추가하여, Value에 numeric type 값을 aggregation 하는 형태

 

3. Crosstab

- 특허 두 칼럼에 교차 빈도, 비율, 덧셈 등을 구할 때 사용

- Pivot table의 특수한 형태

- User-Item Rating Matrix 등을 만들 때 사용가능함

 

4. Merge

- SQL에서 많이 사용하는 Merge와 같은 기능

- 두 개의 데이터를 하나로 합침

 

5. persistence

5.1 XLS persistence

- Dataframe의 엑셀 추출 코드

- Xls 엔진으로 openpyxls 또는 XlsxWrite 사용

5.2 Pickle persistence

- 가장 일반적인 python 파일 persistence

- to_pickle, read_pickle 함수 사용

 

6. 딥러닝에서 확률론이 필요한 이유

- 딥러닝은 확률론 기반의 기계학습 이론에 기반을 두고 있다.

- 기계학습에서 사용되는 손실함수(loss function)들의 작동원리는 데이터 공간을 통계적으로 해석해서 유도한다.

- 예측이 틀릴 위험(risk)을 최소화하도록 데이터를 학습하는 원리는 통계적 기계학습의 기본 원리이다.

- 회귀분석에서 손실함수로 사용되는 $L_2$- 노름은 예측오차의 분산을가장 최소화하는방향으로학습하도록 유도한다 

- 분류문제에서 사용되는 교차 엔트로피(cross-entropy)는 모델 예측의 불확실성을 최소화하는방향으로 학습하도록 유도한다. 이를 위해 측정하는 방법을 알아야 하는 데, 확률론의 기본 지식을 전제로 해야한다.

 

7. 확률변수

 

여기서는 이산형 확률변수와 연속형 확률변수를 다루고자 한다. 이는 확률 분포 $D$ 에 따라 나뉜다.

 

7.1 이산형 확률변수는 확률변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링한다.

 

$P(X\in A) = \sum_{x\in A}^{}P(X=x)$

 

이 때, $P(X = x)$ 는 확률변수가 x값을 가질 확률이라고 해석할 수 있다.

 

7.2 연속형 확률변수는 데이터 공간에 정의도니 확률변수의 밀도(density)위에서의 적분을 통해 모델링한다.

 

$P(X\in A) = \int_{A}^{} P(x)dx$ 

 

이 때, $P(x)=\lim_{h \to 0}\frac{P(x-h\leq X \leq x+h)}{2h}$ 이다. 밀도는 누적확률분포의 변화율을 모델링하며 확률로 해석하면 안된다.

 

8. 조건부 확률과 기계학습

 

8.1 조건부 확률 ($P(y|x)$ 와 같은 형태로 나타낸다.)

 입력변수 x에 대해 정답이 y일 확률를 의미한다. 단, 연속확률분포의 경우는 확률이 아닌 밀도로 해석해야 한다.

- 로지스틱 회귀에서 사용했던 선형모델과 소프트맥스함수의 결합은 데이터에서 추출된 패턴을 기반으로 확률을 해석하는데 사용된다

- 분류 문제에서 $softmax(W\phi+b)$  은 데이터 x로부터 추출된 특징패턴 $\phi(x)$ 과 가중치행렬 W을 통해 조건부 확률 $ P(y|x) $ 을 계산한다.

- 회귀 문제의 경우 조건부 기대값 $E[y|x]$ 을 추정한다.

※ $ E_{y\sim P(y|x)}[y|x] = \int_{y}^{} yP(y|x)dy $

 

- 조건부 기댓값은 $E\left \| y-f(x) \right \|_2$ 을 초소화하는 함수 $f(x)$ 와 일치한다.

- 딥러닝(Deep learning)은 다층 신경망을 사용하여 데이터로부터 특징패턴 $ \phi $ 을 추출한다.

- 특징패턴을 학습하기 위해 어떤 손실함수를 사용할 지는 기계학습 문제와 모델엥 의해 결정된다.

 

8.2 기댓값

 

- 데이터를 대표하는 통계량이면서 동시에 확률분포를 통해 다른 통계적 범함수를 계산하는데 사용한다.

- 기댓값을 이용해 분산, 첨도, 공분산 등 여러 통계량을 계산할 수 있다.

8.3 몬테카를로 샘플링

 

기계학습의 많은 문제들은 확률분포를 명시적으로 모를 때가 대부분이다. 확률분포를 모를 때, 데이터를 이용하여 기댓값을 계산하려면 몬테카를로(Monte Carlo) 샘플링 방법을 사용해야 한다. 참고로, 몬테카를로 샘플링은 이산형이든 연속형이든 관계없이 성립한다. 또한, 독립추출만 보장된다면 대수의 법칙(law of large number)에 의해 수렴성을 보장한다.

 

$ E_{x \sim P(x)}[f(x)] \approx \frac{1}{N}\sum_{N}^{1}f(x^{(i)}), x^{(i)} \sim(i.i.d.) P(x) $

 

8.4 몬테카를로 샘플링 예제 - 함수 $ f(x) = e^{x^{2}} $ 의 [-1,1] 상에서 구하는 방법

 

 

그러나, $ f(x) $의 적분을 해석적으로 구하는 건 어렵다. 따라서 아래의 식을 이용해야 한다.

 

$ E_{x \sim P(x)}[f(x)] \approx \frac{1}{N}\sum_{N}^{1}f(x^{(i)}), x^{(i)} \sim U(-1,1) $

 

즉, $ \int_{-1}^{1} e^{-x^2}dx \approx 1.49364 $가 나온다. 1.49387±0.0039이므로 오차 범위 안에 참값이 있다.

 

몬테카를로 샘플링을 코드로 나타내면 다음과 같다

 

import numpy as np

def mc_int(fun,low,high,sample_size=100, repeat=10):
# fun : 적분하고자 하는 함수
# low,high : low에서 high까지 범위로 적분
# sample_size : 샘플 크기
# repeat : 샘플링 반복횟수
	int_len = np.abs(high-low)
    stat=[]
    for _ in range(repeat):
    	x=np.random.uniform(low=low,high=high,size=sample_size)
        fun_x = fun(x)
        int_val = int_len * np.mean(fun_x)
        stat.append(int_val)
    return np.mean(stat), np.std(stat)
    
def f_x(x):
	return exp(-x**2)​

 

'BoostCamp AI Tech - U Stage' 카테고리의 다른 글

BoostCamp AI Tech - Day11  (0) 2021.02.01
BoostCamp AI Tech - Day10  (0) 2021.02.01
BoostCamp AI Tech - Day08  (0) 2021.01.27
BoostCamp AI Tech - Day07  (0) 2021.01.26
BoostCamp AI Tech - Day06  (0) 2021.01.25

댓글