Generative Model

확률론적 생성모형 (Generative Model)

확률론적 생성모형의 기본 개념

  • 우리가 궁금한 것은 $ x $ (features) 들이 있을 떄, $ y $가 어떤 Class 인지 맞추는 것이다. 맞추기 위해서는 training set 으로 부터 각 Class 마다 $ P(y \mid x) $의 모형을 알아내야 한다.

  • 베이즈 정리를 이용하여, $ y=C_k $일 때의 조건부 확률을 구할 수 있다.
    $$
    P(y = C_k \mid x) = \dfrac{P(x \mid y = C_k); P(y = C_k)}{P(x)}
    $$

  • 이 때, $ P(x \mid y = C_k) $
    == Likelihood
    == y가 k라는 클래스 일 때, x의 확률을 구하는 것이 관건

Likelihood 추정의 알고리즘

  1. $ P(x \mid y = C_k) $ 가 ** 어떤 ** 확률분포를 따를 것이다라고 가정


  2. x의 특성에 따라 우리가 알고 있는 특정 확률분포를 따른다! 라고 가정


  3. Class k 를 만드는 data들을 통해 이 확률분포의 모수값을 구한다.


  4. 모수값을 안다 == $ P(x \mid y = C_k) $ 의 pdf 를 알고 있다.


  5. test set x 가 들어오면 $ P(x \mid y = C_k) $ 를 구할 수 있다.

math_cheatsheet

이산확률분포

베르누이 분포 (bernoulli distribution)

  • 동전 생각하기

  • 결과가 두가지 중 하나

  • 확률변수를 1 or 0 으루 주었을 때,
    $$
    \text{Bern}(x;\mu) = \mu^x(1-\mu)^{(1-x)}
    $$

  • 확률변수를 1 or -1 로 주었을 때,
    $$
    \text{Bern}(x; \mu) = \mu^{(1+x)/2} (1-\mu)^{(1-x)/2}
    $$

1
2
3
4
#예제코드
#베르누이 분포 SciPy
#100개 sampling
sp.stats.bernoulli(mu).rvs(100, random_state=0)

이항분포 (binomial distribution)

  • 동전을 N번 던졌다
  • 성공확률이 $\mu$ 인 베르누이 시도를 $N$ 번 반복 할 때, 성공 횟수를 $X$ 라 하면,

$$ X \sim \text{Bin}(x;N,\mu) $$

$$ \text{Bin}(x;N,\mu) = \binom N x \mu^x(1-\mu)^{N-x} $$

1
2
sp.stats.binom(N, mu).rvs(100, random_state=0)

카테고리 분포 (Categorical distribution)

  • 주사위 생각해!
  • $K$ 개의 카테고리가 있을 때,
    $$ x = (x_1, x_2, x_3, x_4, … , x_k) $$

각 원소 x_i 가 1이 나올 수 있는 확률 ($i$번쨰 원소의 성공확률)을 $\mu_i$ 라 하면,

$$ \text{Cat}(x;\mu) = \mu_1^{x_1} \mu_2^{x_2} \cdots \mu_K^{x_K} = \prod_{k=1}^K \mu_k^{x_k} $$

이 표현은 One-Hot-Encoding 으로 카테고리 분포를 표현 했기에 가능하다.

단,

$$ 0 \leq \mu_i \leq 1 $$

$$ \sum_{k=1}^K \mu_k = 1 $$

1
2
3
#카테고리 분포는 SciPy 의 메소드가 없으므로, 다항분포의 N을 1로 준다.
#mu 는 각 term 이 나올 수 있는 확률 vector
sp.stats.multinomial(1, mu)

다항 분포 (Multinomial distribution)

  • 주사위를 여러번 던졌다.
  • 카테고리 시도를 $N$ 번 반복하여 $k$ $(k=1,…,K)$ 가 $x_k$ 번 나올 확률분포.
1
2
3
#N : number of trial
#mu 는 각 term 이 나올 수 있는 확률 vector
sp.stats.multinomial(N, mu)