Math

[AI class w7d1] Probability Distributions (이산확률분포) 확률분포 TIL

makeitworth 2021. 6. 7. 13:27

전체적으로  PRML(Pattern Recognition & Machien Learning) 2장의 내용을 정리한 것 같다.

책의 2장 내용을 정리한 블로그: http://norman3.github.io/prml/docs/chapter02/1

밀도추정 (Density Estimation)

$N$ 개의 관찰데이터(observations) $x_1, ..., x_N$ 가 주어졌을 때 분포함수 $p(x)$를 찾는 것

  1. $p(x)$ 를 파라미터화된 분포로 가정한다. 회귀, 분류문제에서는 주로 p(t|x), p(C|x)를 추정한다.
  2. 그다음 분포의 파라미터를 찾는다.
    • 빈도주의(Frequentism) 방법 : 어떤 기준(예: likelihood)을 최적화시키는 과정을 통해
      파라미터 값을 정한다. 그렇게 파라미터의 하나의 값을 구하게 된다.
    • 베이시안(Bayesian) 방법 : 먼저 파라미터의 사전확률을 가정하고
      Bayes' rule을 통해 파라미터의 사후확률을 구한다. (참고: 베이즈 룰 과 딥러닝)
  3. 파라미터를 찾았다면(한 개의 값이든 분포든) 그것을 사용해 예측할 수 있다. (t 혹은 C).

켤레사전분포(Conjugate Prior) : 사후확률이 사전확률과 동일한 함수형태를 가지도록 해준다.

이항변수 - 빈도주의 방법

이항확률변수(binary random variable) $x \in {0,1}$ (예: 동전던지기) 가 다음을 만족한다고 하자.

$$p(x=1|\mu)=\mu, ;;p(x=0|\mu)=1-\mu
$$

$p(x)$ 는 베르누이 분포(Bernoulli distribution)로 표현될 수 있다.

$$Bern(x|\mu)=\mu^x(1-\mu)^{1-x}
$$

  • 기댓값 $\mathbb E[x] = \mu$

$$\mathbb E[x]=1 \cdot\mu;+;0 \cdot(1-\mu) = \mu$$

  • 분산 $var[x] = \mu(1-\mu)$

$$\begin{aligned}var[x] &= \mathbb E[x^2]-\mathbb E[x]^2\&= {1\cdot\mu;+;0\cdot (1-\mu)} - \mathbb \mu^2\&=\mu-\mu^2\&=\mu(1-\mu)\end{aligned}$$

  • 우도함수 (Likelihood Function) (우도함수는 파라미터 $\mu$ 의 함수)
  • $x$ 값을 $N$ 번 관찰한 결과를 $D={x_1,\dots, x_N}$라고 하자.
    각 $x$ 가 독립적으로 $p(x|\mu)$에서 뽑혀진다고 가정하면 다음과 같이 우도함수($\mu$의 함수)를 만들 수 있다.

$$p(D|\mu)=\prod_{n=1}^Np(x_n|\mu)=\prod_{n=1}^N\mu^{x_n}(1-\mu)^{1-x_n}
$$

  • 빈도주의 방법에서는 $\mu$ 값을 이 우도함수를 최대화시키는 값으로 구할 수 있다.
    또는 아래와 같이 로그우도함수를 최대화시키는 값으로 구한다. ( 곱의 형태보다는 합의 형태가 더 안정적이다. 따라서 로그를 씌운다.)

$$\ln p(D|\mu)=\ln\sum_{n=1}^Np(x_n|\mu)=\sum_{n=1}^N{x_n\ln\mu+(1-x_n)\ln(1-\mu)}$$

  • $\mu$의 최대우도 추정치(maximum likelihood estimate)는

$\mu^{ML}=\frac{m}{N}$ with $m=$ ($#observations$ of $x = 1$)

 

  • $N$이 작은 경우에 위 MLE는 과적합된 결과를 낳을 수 있다. (예: 동전을 3번 던져서 모두 앞면이 나온 경우)
  • $$N=m=3 \rightarrow \mu^{ML}=1!$$
  • 참고 :최대우도법(MLE)

이항변수 - 베이시안 방법

이항분포 (Binomial Distribution)

$D={x_1,\dots, x_N}$ 일 때, 이상변수 $x$가 1인 경우를 $m$번 관찰할 확률

$$Bin(m|N,\mu)=\begin{pmatrix} N \\ m \end{pmatrix}\mu^m(1-\mu)^{N-m}$$

$$\begin{pmatrix} N \\ m \end{pmatrix}=\frac{N!}{(N-m)!m!}
$$

*조합(Combination)

  • 기댓값 $\mathbb E[m] = \textstyle\sum^N_{m=0}mBin(m|N,\mu)=N\mu$
  • 분산 $var[m] = \textstyle\sum^N_{m=0}(m-\mathbb E[m])^2Bin(m|N,\mu)=N\mu(1-\mu)$

데이터를 보는 관점

  • 베르누이 시행의 반복: $x_1, \dots,x_N$ 각각이 확률변수
  • $x$가 1인 경우를 몇 번 관찰했는가: 하나의 확률변수 $m$

-> 베이시안 방법을 쓰기 위해서는 데이터의 우도를 구해야 하는데
이항분포를 가정하면 우도함수가 하나의 변수 m ($x_1,\dots,x_N$ 대신) 로 표현가능하므로 간편해진다.

베타분포(Beta Distribution)

베이시안 방법으로 문제를 해결하기 위해 베타분포를 켤레사전분포(conjugate prior) 로 사용한다.

사후확률과 사전확률이 동일한 함수 형태를 가지게 하는 것이 중요하다.

 

$$Beta(\mu|a,b)= {\Gamma(a+b)}{\Gamma(a)\Gamma(b)}\mu^{a-1}(1-\mu)^{b-1}
$$

감마함수 $\Gamma(x)$ 는 다음과 같이 정의된다.

$$\Gamma(x)=\int_0^\infty u^{x-1}e^{-u}du
$$

감마함수는 계승(factorial; 팩토리얼)을 실수로 확장시킨다. $\Gamma(n)=(n-1)!$

 

a, b가 주어져 있을 때 베타함수가 어떻게 그려지는가?

 

1. a, b 가 동일하지만 값이 1보다 작은 경우

2. a, b 가 동일하고 값이 1인 경우

3. a가 b보다 작은경우

4. a가 b보다 큰 경우

-> a와 b가 커질수록 부드러운 곡선이 된다!

 

사전지식에 따라  $\mu$가 가질 수 있는 확률을 만들어 낼 수 있게 된다.

ex> a의 크기가 크고 b와 차이가 크면 클 수록 오른쪽으로 기울어지는 베타 분포, a, b가 동일하다면?

 

베타분포 공식 증명

 

1. $\Gamma(x)=(x-1)\Gamma(x-1)$ 임을 증명하기

 

2. 베타분포는 normalized 함을 증명하기

 

$\int_0^1 \mu^{a-1}(1-\mu)^{b-1}d\mu=\frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}$

 

기댓값 $\mathbb E[\mu] = \frac{a}{a+b}$

증명

분산 $var[\mu] = \frac{ab}{(a+b)^2(a+b+1)}$ $\mu$의

사후확률(posterior) ( $m$은 특정 경우의 관찰 횟수, $l=N-m$) $$p(\mu|m,l,a,b)=\frac{\Gamma(m+a+l+b)}{\Gamma(m+a)\Gamma(l+b)}\mu^{m+a-1}(1-\mu)^{l+b-1}$$

증명

연속적인 업데이트: 하나의 샘플을 관찰했을 때 사전확률과 사후확률의 관계

 

예제:

  • 첫 번째 그림: 사전확률은 a=2, b=2인 베타분포
  • 두 번째 그림: x=1인 하나의 샘플에 대한 우도함수 (binomial distribution)
  • 세 번째 그림: 사후확률은 a=3, b=2인 베타분포
  • (다음 관찰에 대해선 이 사후확률이 사전확률로 쓰이게 된다.)

 

예측분포(Predictive Distribution)

이런 식으로 파라미터를 얻고 난 다음에 하고자 하는 것은 -> 예측분포

예측 분포란 ? 

   새로운 데이터 포인트 $x$가 주어질 확률

 

$$p(x=1|D)=\int_0^1p(x=1|\mu)p(\mu|D)d\mu=\int_0^1\mu p(\mu|D)d\mu=\mathbb E[\mu|D]
$$

$$p(x=1|D)=\frac{m+a}{m+a+l+b}
$$

증명

(예시 1)

사전지식 : $a=5, b=5$

새로운 관측값 : $m=10, l=2$

$p(x=1|D)=\frac{10+5}{10+5+2+5}=\frac{15}{22}$

 

(예시 2)

$N=m=3$

사전 지식 $a=2, b=1$

새로운 관측값 $m=3, l=0$ (⇒빈도주의의 경우에는 m, l만 가지고 $\mu=1$ 로 예측, 틀리게 된다)

베이지안 방법을 사용하면,

$p(x=1|D)=\frac{5}{6}$

극단적인 예측이 아니라 어느 정도 불확실성을 남겨두는 예측을 하게 된다.

 

다항변수 - 빈도주의 방법

$K$개의 상태를 가질 수 있는 확률변수를 $K$차원의 벡터 $\textbf {x}$ (하나의 원소만 1이고 나머지는 0)로 나타낼 수 있다. (각각의 원소 $x_1, ..., x_k$  가 확률 변수)

이런 $\textbf {x}$를 위해서 베르누이 분포를 다음과 같이 일반화시킬 수 있다.

$$p(\textbf x| \mu)=\prod_{k=1}^K\mu_k^{x_k}\hspace{2em}\text{with} \textstyle\sum_k\mu_k=1
$$

 

$x_1 =0, x_2=1, x_3=0$일 때 $\mu_1 = 0, \mu_2 = 1, \mu_3 = 0$ 이므로 남는 것은 $\mu_2$ 뿐

  • 기댓값

$$\mathbb E[\textbf x| \mu]=\sum_\textbf xp(\textbf x| \mu)=(\mu_1,\dots,\mu_M)^T= \mu
$$

 

  • 우도함수

$\textbf x$ 값을 $N$ 번 관찰한 결과 $D={\textbf x,\dots, \textbf  x_N}$ 가 주어졌을 때, 우도함수는 다음과 같다.

$$p(D|\textbf \mu)=\prod_{n=1}^N\prod_{k=1}^K\mu_k^{x_{nk}} = \prod_{k=1}^K\mu_k^{(\sum_n{x_{nk}})} =\prod_{k=1}^K\mu_k^{m_{k}}
$$

$N, K$ 2개에 관한 정리를 $K$ 1개에 관한 정리로 만들 수 있음

 

$$m_k=\sum_nx_{nk}
$$

 

  • $\mu$ 의 최대우도 추정치(maximum likelihood estimate)

$\mu$ 의 최대우도 추정치를 구하기 위해선 $\mu_k$의 합이 1이 된다는 조건하에서  \ln p(D|\mu)$ 를 최대화시키는 $\mu_k$를 구해야한다. (조건이 있는 constrained optimization)

 라그랑주 승수(Lagrange multiplier) $\lambda$ 를 사용해서 다음을 최대화시키면 된다.

 

$$\sum_{k=1}^Km_k\ln\mu_k+\lambda\begin{pmatrix}\sum_{k=1}^{K}\mu_k-1\end{pmatrix}
$$

$$\mu_k^{ML}=\frac{m_k}{N}
$$

다항변수 - 베이시안 방법

다항분포(Multinomial distribution)

(이항분포를 일반화한 형태) 파라미터 $\mu$와 전체 관찰개수 $N$이 주어졌을 때 $m_1,\dots,m_K$의 분포를 다항분포라고 하고 다음과 같은 형태를 가진다.

$$\text{Mult}(m_1,m_2,\dots,m_K|\mu,N)=\begin{pmatrix}N \\m_1 m_2\dots m_K\end{pmatrix}\prod_{k=1}^K\mu_k^{m_k}
$$

$$\begin{pmatrix}N \\m_1 m_2\dots m_K\end{pmatrix} = \frac{N!}{m_1! m_2!\dots m_K!}$$

$$\sum m_k = N$$

  • $\mathbb E[m_k]=N\mu_k$
  • $\text{var}[m_k]=N\mu_k(1-\mu_k)$
  • $\text{cov}[m_jm_k]=-N\mu_j\mu_k$

디리클레 분포(Dirichlet distribution)

디리클레 분포 : 다항분포를 위한 켤레사전분포 (베타 분포를 일반화시킨 형태)

$$Dir(\mu|\alpha)=\frac{\Gamma(\alpha_0)}{\Gamma(\alpha_1)\cdots\Gamma(\alpha_k)}\prod_{k=1}^K\mu_k^{\alpha_k-1}
$$

$$\alpha_0=\sum_{k=1}^K\alpha_k
$$

디리클레 분포의 normalization 증명 ($K =3$)

베타분포가 normalized함을 증명한 것에서 부터,

 $K = 2$ 일 때 normalized된다는 것을 알고 있으면, $K =3$일 때도 normalized 된다는 것을 보일 수 있다.

다음 결과를 사용한다.

$$\begin{align*}
\int_L^U(x-L)^{a-1}(U-x)^{b-1}\mathrm{d}x &= \int_0^1 (U-L)^{a-1}t^{a-1}(U-L)^{b-1}(1-t)^{b-1}(U-L)\mathrm{d}t &\mathrm{by}~ t=\frac{x-L}{U-L}\\
&= (U-L)^{a+b-1}\int_0^1 t^{a-1}(1-t)^{b-1}\mathrm{d}t\\
&= (U-L)^{a+b-1}\frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}
\end{align*}$$

$$\begin{align*}
\int_0^{1-\mu_1}\mu_1^{\alpha_1-1}\mu_2^{\alpha_2-1}(1-\mu_1-\mu_2)^{\alpha_3-1}\mathrm{d}\mu_2 &= \mu_1^{\alpha_1-1}\int_0^{1-\mu_1}\mu_2^{\alpha_2-1}(1-\mu_1-\mu_2)^{\alpha_3-1}\mathrm{d}\mu_2 & \textrm{by}~ L=0, U=1-\mu_1\\
&= \mu_1^{\alpha_1-1}(1-\mu_1)^{\alpha_2+\alpha_3-1}\frac{\Gamma(\alpha_2)\Gamma(\alpha_3)}{\Gamma(\alpha_2+\alpha_3)}
\end{align*}$$

$$\begin{align*}
\int_0^1\int_0^{1-\mu_1}\mu_1^{\alpha_1-1}\mu_2^{\alpha_2-1}(1-\mu_1-\mu_2)^{\alpha_3-1}\mathrm{d}\mu_2\mathrm{d}\mu_1 &= \frac{\Gamma(\alpha_2)\Gamma(\alpha_3)}{\Gamma(\alpha_2+\alpha_3)} \int_0^1 \mu_1^{\alpha_1-1}(1-\mu_1)^{\alpha_2+\alpha_3-1}\mathrm{d}\mu_1\\
&= \frac{\Gamma(\alpha_2)\Gamma(\alpha_3)}{\Gamma(\alpha_2+\alpha_3)} \frac{\Gamma(\alpha_1)\Gamma(\alpha_2+\alpha_3)}{\Gamma(\alpha_1+\alpha_2+\alpha_3)}\\
&= \frac{\Gamma(\alpha_1)\Gamma(\alpha_2)\Gamma(\alpha_3)}{\Gamma(\alpha_1+\alpha_2+\alpha_3)}
\end{align*}$$

 

일반적인 경우 ($K = M$) : 귀납법으로 증명 (base가 성립하고, M-1이 성립한다고 가정할 때, M일 경우도 성립한다고 보여주면, 모든 M에서 성립한다고 할 수 있음)

 

  • $\mu$ 의 사후확률(posterior)
  • $\alpha_k$를 $x_k=1$에 대한 사전관찰 개수라고 생각할 수 있다.

$$\begin{aligned}p(\mu|D,\alpha)=Dir(\mu|\alpha+m)=\frac{\Gamma(\alpha_0+N)}{\Gamma(\alpha_1+m_1)\dots\Gamma(\alpha_K+m_K)}\prod_{k=1}^K\mu_k^{a_k+m_k-1}\end{aligned}$$ $$\textbf m = (m_1,\dots,m_k)^T$$

 

참고 : 베타분포, 감마분포, 디리클레 분포

[실습]

사전 준비

# for inline plots in jupyter
%matplotlib inline
# import matplotlib
import matplotlib.pyplot as plt
# for latex equations
from IPython.display import Math, Latex
# for displaying images
from IPython.core.display import Image
# import seaborn
import seaborn as sns
# settings for seaborn plotting style
sns.set(color_codes=True)
# settings for seaborn plot sizes
sns.set(rc={'figure.figsize':(5,5)})
import numpy as np

Uniform Distribution

# import uniform distribution
from scipy.stats import uniform

# random numbers from uniform distribution
n = 10000
start = 10
width = 20
data_uniform = uniform.rvs(size=n, loc = start, scale=width)

data_uniform

ax = sns.distplot(data_uniform,
                  bins=100,
                  kde=True,
                  color='skyblue',
                  hist_kws={"linewidth": 15,'alpha':1})
ax.set(xlabel='Uniform Distribution ', ylabel='Frequency')

Bernoulli Distribution

from scipy.stats import bernoulli
data_bern = bernoulli.rvs(size=10000,p=0.8)

np.unique(data_bern, return_counts=True)

data_bern[:100]

ax= sns.distplot(data_bern,
                 kde=False,
                 color="skyblue",
                 hist_kws={"linewidth": 15,'alpha':1})
ax.set(xlabel='Bernoulli Distribution', ylabel='Frequency')

Beta Distribution

from scipy.stats import beta
a, b = 0.1, 0.1
data_beta = beta.rvs(a, b, size=10000)

data_beta

ax= sns.distplot(data_beta,
                 kde=False,
                 color="skyblue",
                 hist_kws={"linewidth": 15,'alpha':1})
ax.set(xlabel='Beta Distribution', ylabel='Frequency')

 

a, b = 2, 8
data_beta = beta.rvs(a, b, size=10000)
ax= sns.distplot(data_beta,
                 kde=False,
                 color="skyblue",
                 hist_kws={"linewidth": 15,'alpha':1})
ax.set(xlabel='Beta Distribution', ylabel='Frequency')


Multinomial Distribution

from scipy.stats import multinomial
data_multinomial = multinomial.rvs(n=1, p=[0.2, 0.1, 0.3, 0.4], size=10000)

for i in range(4):
  print(np.unique(data_multinomial[:,i], return_counts=True))

(array([0, 1]), array([8001, 1999]))

(array([0, 1]), array([8969, 1031]))

(array([0, 1]), array([6983, 3017]))

(array([0, 1]), array([6047, 3953]))