전체적으로 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)$를 찾는 것
- $p(x)$ 를 파라미터화된 분포로 가정한다. 회귀, 분류문제에서는 주로 p(t|x), p(C|x)를 추정한다.
- 그다음 분포의 파라미터를 찾는다.
- 빈도주의(Frequentism) 방법 : 어떤 기준(예: likelihood)을 최적화시키는 과정을 통해
파라미터 값을 정한다. 그렇게 파라미터의 하나의 값을 구하게 된다. - 베이시안(Bayesian) 방법 : 먼저 파라미터의 사전확률을 가정하고
Bayes' rule을 통해 파라미터의 사후확률을 구한다. (참고: 베이즈 룰 과 딥러닝)
- 빈도주의(Frequentism) 방법 : 어떤 기준(예: likelihood)을 최적화시키는 과정을 통해
- 파라미터를 찾았다면(한 개의 값이든 분포든) 그것을 사용해 예측할 수 있다. (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]))
'Math' 카테고리의 다른 글
[AI class w7d2] Probability Distributions 2(연속확률분포) 확률분포 TIL (0) | 2021.06.08 |
---|---|
책 <인공지능을 위한 수학> 정리 (0) | 2021.05.07 |
[AI class day10] 인공지능 수학- 추정, 검정, 엔트로피 TIL (0) | 2021.05.03 |
[AI class day 9] 인공지능 수학- 확률과 확률분포 TIL (0) | 2021.04.29 |
[AI class day 8] 인공지능 수학- 자료의 정리 TIL (0) | 2021.04.28 |