17 Sep 2017 » statistics

2017-09-17-probability

수식이 깨질 경우 새로고침을 눌러주세요.


Estimation (추정) ②

MLE 계산

실제로 MLE 방법을 사용하려면 likelihood가 최대가 되는 $\theta$를 수치적으로 계산해야 한다. 즉 수치적 최적화(numerical optimization) 문제가 된다.

$$ \hat\theta_{\text{MLE}} = \arg \max_{\theta} L(\theta; \{x_i\}) $$

일반적으로 likelihood를 직접 사용하는 것이 아니라 다음과 같은 이유로 로그 변환한 로그 likelihood 함수 $\mathcal{LL} = \log{\mathcal{L}}$를 사용하는 경우가 많다.

  1. 로그 변환을 해도 원본 데이터 분포에서 최대값의 위치는 동일하다.
  2. 반복시행으로 인한 복수 표본 데이터인 경우 서로 독립이 되어서 결합 확률밀도함수가 동일한 함수의 곱으로 표현된다.
    • 이 때 로그 변환에 의해 곱셈이 덧셈되어 계산량이 감소한다.

Log-Likelihood

MLE는 Likelihood의 최대값을 찾는 과정

  • Likelihood 함수는 최대값 위치만이 중요하다.

Log 변환을 해도 최대값 위치는 변하지 않는다.

Log 연산을 하면 conditionally independent 가정에 의해 계산이 쉬워진다.

  • 곱 → 합

IID (Independent and Indentical Distribution)

서로 독립인 샘플이 여러 개 있는 경우

$$ \{ x_i \} = \{ x_{1:N} \} $$

각각의 샘플들은 파라미터를 가지는 동일한 확률모형에서 나왔다.

$$ x_i \propto P(x|\theta) \;\; \text{for all } i = 1, \cdots, N $$

각각의 샘플들은 파라미터에 대해 서로 조건부 독립이다.

$$ P(x_i, x_j\;|\;\theta) = P(x_i\;|\;\theta)\cdot P(x_j\;|\;\theta) $$$$ \begin{eqnarray*} P(x_{1:N}\;|\;\theta) &=& P(x_1,\;x_2,\cdots,x_n\;|\;\theta) \\ &=& P(x_1\;|\;\theta)\cdot P(x_2\;|\;\theta)\cdots P(x_n\;|\;\theta) \\ &=& \prod_{i=1}^N P(x_i\;|\;\theta) \end{eqnarray*} $$

MLE로 모수 추정을 해보자.

베르누이 분포의 모수 추정(MLE for Bernoulli Distribution)

각각의 시도에 대한 확률은 베르누이 분포

$$ P(x ; \theta ) = \text{Bern}(x ; \theta ) = \theta^x (1 - \theta)^{1-x} \;\;\;\; (단,\; x = 0\; or\; 1)$$

N개의 독립 샘플이 있는 경우

$$ L(\theta \; ; x_{1:N}) = P(x_{1:N};\theta) = \prod_{i=1}^N \theta^{x_i} (1 - \theta)^{1-x_i} $$

Log-Likelihood $$ \begin{eqnarray*} \log L &=& \log P(x_{1:N};\theta) \\ &=& \sum_{i=1}^N \big\{ {x_i} \log\theta + (1-x_i)\log(1 - \theta) \big\} \\ &=& \sum_{i=1}^N {x_i} \log\theta + \left( N-\sum_{i=1}^N x_i \right) \log( 1 - \theta ) \\ \end{eqnarray*} $$

$$ x = 1(성공)\;\; 또는\;\; x= 0(실패) 이므로 \;\; 전체 \;시도 \;횟수 = N, \;\;그 \;중 \;성공 \;횟수\; N_1 = \sum_{i=1}^N {x_i}\;이라\;하면, $$
$$ \begin{eqnarray*} \log L &=& N_1 \log\theta + (N-N_1) \log(1 - \theta) \\ \end{eqnarray*} $$

Log-Likelihood Derivative

$$ \begin{eqnarray*} \dfrac{\partial \log L}{\partial \theta} &=& \dfrac{\partial}{\partial \theta} \big\{ N_1 \log\theta + (N-N_1) \log(1 - \theta) \big\} = 0\\ \\ &=& \dfrac{N_1}{\theta} - \dfrac{N-N_1}{1-\theta} = 0 \\ \end{eqnarray*} $$$$ \dfrac{N_1}{\theta} = \dfrac{N-N_1}{1-\theta} $$$$ \dfrac{1-\theta}{\theta} = \dfrac{N-N_1}{N_1} $$$$ \dfrac{1}{\theta} - 1 = \dfrac{N}{N_1} - 1 $$$$ \theta= \dfrac{N_1}{N} $$

MLE를 통해 신뢰도까지 표현이 가능하다.

In [1]:
# -*- coding: utf-8 -*-

import seaborn as sns
import pandas as pd
import scipy as sp
import matplotlib as mpl
import matplotlib.pylab as plt
import numpy as np
%matplotlib inline
In [2]:
np.random.seed(0)
theta_theory = 0.6

# p = 0.6으로 1000번 하자.
x = sp.stats.bernoulli(theta_theory).rvs(1000)

# x = 0, 1일때의 개수
N_0, N_1 = np.bincount(x, minlength=2)
N = N_0 + N_1
theta_simulation = N_1/N
theta_simulation
Out[2]:
0.60999999999999999

MLE for Multinomial Distribution(다항분포 → 카테고리 분포의 모수 추정)

Multinomial Distribution의 확률밀도함수(pdf) $$ \begin{eqnarray*} f(x_{1:N};\theta) &=& \frac{N!}{x_1!\cdot x_2! \cdots x_N!} \cdot \theta^{x_1}_1 \cdot \theta^{x_2}_2 \cdots \theta^{x_N}_N \\ \\ &=& \frac{N!}{x_1!\cdot x_2! \cdots x_N!}\prod_{k=1}^N \theta^{x_k}_k \\ \\ &=& \frac{N!}{x_1!\cdot x_2! \cdots x_N!}\cdot\text{Cat}(x ; \theta) \end{eqnarray*} $$

$$ 단,\;\; (x_1 + \cdots + x_N = N)이며, \;\;\;(\theta_1 + \cdots + \theta_N = 1)\;\; 이다. $$

위에서 보듯이 다항분포의 각각의 시도는 카테고리 분포를 따른다. $$ (\theta_1 + \bbox[5px, border:2px solid red]{\theta_2} + \cdots + \theta_N)^N $$

조합은 각 theta의 계수가 되며, 위의 theta_i는 각각 모두 카테고리 분포를 따른다.

$$ P(x_i ; \theta_i ) = \text{Cat}(x_i ; \theta_i) = \prod_{k=1}^K \theta_k^{x_k} $$$$ \sum_{k=1}^K \theta_k = 1 $$

N개의 독립 샘플이 있는 경우, Likelihood $$ \begin{eqnarray*} L(\theta ; x_{1:N}) &=& P(x_{1:N};\theta) \\ &=& \prod_{k=1}^N P(x_i;\theta_i) \\ &=& \prod_{i=1}^N \prod_{k=1}^K \theta_k^{x_{i,k}} \end{eqnarray*} $$

Log-Likelihood $$ \begin{eqnarray*} \log L &=& \log P(x_{1:N};\theta) \\ &=& \sum_{i=1}^N \sum_{k=1}^K \left( {x_{i,k}} \log\theta_k \right) \\ &=& \sum_{k=1}^K \sum_{i=1}^N \left( \log\theta_k \cdot {x_{i,k}}\right) \\ &=& \sum_{k=1}^K \left( \log\theta_k \left( \sum_{i=1}^N {x_{i,k}} \right) \right) \end{eqnarray*} $$

$$ x_k가\; 나온\; 횟수\;\; N_k = \sum_{i=1}^N {x_{i,k}}이라 \;하면\\ \\ Log-Likelihood는 $$$$ \begin{eqnarray*} \log L &=& \sum_{k=1}^K \left( \log\theta_k N_k \right) \end{eqnarray*} $$

추가 조건 → 랑그라쥬의 상수를 이용한다. $$ \sum_{k=1}^K \theta_k = 1 $$

Log-Likelihood Derivative with Lagrange multiplier $$ \begin{eqnarray*} \dfrac{\partial \log L}{\partial \theta_k} &=& \dfrac{\partial}{\partial \theta_k} \left\{ \sum_{k=1}^K \log\theta_k N_k + \lambda \left(1- \sum_{k=1}^K \theta_k\right) \right\} = 0 \;→\;① \\ \dfrac{\partial \log L}{\partial \lambda} &=& \dfrac{\partial}{\partial \lambda} \left\{ \sum_{k=1}^K \log\theta_k N_k + \lambda \left(1- \sum_{k=1}^K \theta_k \right) \right\} = 0 \;→\;② \\ \end{eqnarray*} $$


$$ ① \;:\;\; \sum_{k=1}^K (\frac{N_k}{\theta_k}) + \lambda(0-\sum_{k=1}^K 1) = 0 \\ \sum_{k=1}^K (\frac{N_k}{\theta_k}) = \sum_{k=1}^K \lambda \\ \dfrac{N_K}{\theta_K} = \lambda $$$$ \theta_k = \frac{N_k}{\lambda} $$
$$ ② \;:\;\; 1- \sum_{k=1}^K \theta_k = 0 \\ \sum_{k=1}^K \theta_k = 1 $$
$$ ② \;← \;① \\ \sum_{k=1}^K \frac{N_k}{\lambda} = 1 \\ \sum_{k=1}^K N_k = \lambda = N $$
$$ ∴)\;\;\;\; \theta_k = \frac{N_k}{N} $$
In [3]:
np.random.seed(0)

theta_0 = np.array([0.1, 0.3, 0.6])
x = np.random.choice(np.arange(3), 1000, p=theta_0)

# 카테고리별 카운트해라.
N0, N1, N2 = np.bincount(x, minlength=3)
N = N0 + N1 + N2

theta = np.array([N0, N1, N2]) / N
theta
Out[3]:
array([ 0.098,  0.317,  0.585])

정규 분포의 모수 추정(MLE for Gaussian Normal Distribution)

각각의 시도 X는 가우시안 정규 분포를 따른다.

$$ p(x ; \theta ) = N(x ; \mu, \sigma^2) = \dfrac{1}{\sqrt{2\pi\sigma^2}} \exp \left(-\dfrac{(x-\mu)^2}{2\sigma^2}\right) $$

N개의 독립 샘플이 있는 경우,

$$ L(\theta;x_{1:N}) = p(x_{1:N};\theta) = \prod_{i=1}^N \dfrac{1}{\sqrt{2\pi\sigma^2}} \exp \left(-\dfrac{(x_i-\mu)^2}{2\sigma^2}\right)$$

Log-Likelihood

$$ \begin{eqnarray*} \log L &=& \log p(x_{1:N};\theta) \\ &=& \sum_{i=1}^N \left\{ -\dfrac{1}{2}\log(2\pi\sigma^2) - \dfrac{(x_i-\mu)^2}{2\sigma^2} \right\} \\ &=& -\dfrac{N}{2} \log(2\pi\sigma^2) - \dfrac{1}{2\sigma^2}\sum_{i=1}^N (x_i-\mu)^2 \end{eqnarray*} $$

Log-Likelihood Derivative

$$ \begin{eqnarray*} \dfrac{\partial \log L}{\partial \mu} &=& \dfrac{\partial}{\partial \mu} \left\{ \dfrac{N}{2} \log(2\pi\sigma^2) + \dfrac{1}{2\sigma^2}\sum_{i=1}^N (x_i-\mu)^2 \right\} = 0 \;\;-\;\;① \\ \dfrac{\partial \log L}{\partial \sigma^2} &=& \dfrac{\partial}{\partial \sigma^2} \left\{ \dfrac{N}{2} \log(2\pi\sigma^2) + \dfrac{1}{2\sigma^2}\sum_{i=1}^N (x_i-\mu)^2 \right\} = 0 \;\;-\;\;②\\ \end{eqnarray*} $$

$$ ① \;:\;\;\; \dfrac{2}{2\sigma^2}\sum_{i=1}^N (x_i-\mu) = 0 $$$$ N \mu = \sum_{i=1}^N x_i $$$$ \mu = \dfrac{1}{N}\sum_{i=1}^N x_i = \bar{x} $$
$$ ②\;:\;\; \dfrac{N}{2\sigma^2 } - \dfrac{1}{2(\sigma^2)^2}\sum_{i=1}^N (x_i-\mu)^2 = 0 $$$$ \sigma^2 = \dfrac{1}{N}\sum_{i=1}^N (x_i-\mu)^2 = \dfrac{1}{N}\sum_{i=1}^N (x_i-\bar{x})^2 = s^2 $$

biased된 샘플 분산이 나온다.

In [4]:
np.random.seed(0)
mu0 = 1
sigma0 = 2

x = sp.stats.norm(mu0, sigma0).rvs(1000)

xbar = x.mean()
s2 = x.std(ddof=1)

xbar, s2
Out[4]:
(0.90948658501960922, 1.9750540913890255)

다변수 정규 분포의 모수 추정(MLE for Multivariate Gaussian Normal Distribution)

각각의 시도는 다변수 정규 분포를 따른다.

$$ p(x ; \theta ) = N(x ; \mu, \Sigma) = \dfrac{1}{(2\pi)^{D/2} |\Sigma|^{1/2}} \exp \left( -\dfrac{1}{2} (x-\mu)^T \Sigma^{-1} (x-\mu) \right) $$

N개의 독립 샘플이 있는 경우

$$ L(\theta;x_{1:N}) = p(x_{1:N};\theta) = \prod_{i=1}^N \dfrac{1}{(2\pi)^{D/2} |\Sigma|^{1/2}} \exp \left( -\dfrac{1}{2} (x_i-\mu)^T \Sigma^{-1} (x_i-\mu) \right)$$

Log-Likelihood $$ \begin{eqnarray*} \log L &=& \log P(x_{1:N};\theta) \\ &=& \sum_{i=1}^N \left\{ -\log((2\pi)^{D/2} |\Sigma|^{1/2}) - \dfrac{1}{2} (x_i-\mu)^T \Sigma^{-1} (x_i-\mu) \right\} \\ &=& C -\dfrac{N}{2} \log|\Sigma| - \dfrac{1}{2} \sum (x_i-\mu)^T \Sigma^{-1} (x_i-\mu) \end{eqnarray*} $$


  • precision matrix $$\Lambda = \Sigma^{-1}$$

$$ \begin{eqnarray*} \log L &=& C + \dfrac{N}{2} \log|\Lambda| - \dfrac{1}{2} \sum(x_i-\mu)^T \Lambda (x_i-\mu) \end{eqnarray*} $$$$ \begin{eqnarray*} \dfrac{\partial L}{\partial \mu} &=& - \dfrac{\partial}{\partial \mu} \sum_{i=1}^N (x_i-\mu)^T \Lambda (x_i-\mu)\;=\;0 \;\;\;\cdots\;\;① \\ &=& - \sum_{i=1}^N [\Lambda(x_i -\mu) + ((x_i-\mu)^T \Lambda)^T]\\ &=& - \sum_{i=1}^N [\Lambda(x_i -\mu) + \Lambda^T (x_i-\mu)]\\ &=& - \sum_{i=1}^N 2\Lambda (x_i - \mu) \\ &=& -2\Lambda \sum_{i=1}^N (x_i - \mu) = 0 \end{eqnarray*}$$$$ \sum_{i=1}^N (x_i - \mu) = 0 $$$$∴\;\;\;\; \mu = \dfrac{1}{N}\sum_{i=1}^N x_i\;\;\;\cdots\;\;① $$

참고 $$ \Lambda \;:\;\; 공분산\;행렬이다.\;\; 대칭행렬이므로 \;\;\Lambda = \Lambda^T $$


참고 $$ \begin{eqnarray*} \mathbf{X}^T\mathbf{AX} &=& tr(\mathbf{X}^T\mathbf{AX}) \;\;→ \;\;스칼라 \\ &=& tr(\mathbf{AX}\mathbf{X}^T) \\ &=& tr(\mathbf{X}\mathbf{X}^T\mathbf{A}) \end{eqnarray*} $$

$$ \begin{eqnarray*} \dfrac{\partial L}{\partial \Lambda} &=& \dfrac{\partial}{\partial \Lambda} \dfrac{N}{2} \log|\Lambda| - \dfrac{\partial}{\partial \Lambda} \dfrac{1}{2} \sum_{i=1}^N (x_i-\mu)^T \Lambda (x_i-\mu) =0 \;\;\;\cdots\;\;② \\ &=& \dfrac{\partial}{\partial \Lambda} \dfrac{N}{2} \log|\Lambda| - \dfrac{\partial}{\partial \Lambda} \dfrac{1}{2} \sum_{i=1}^N \text{tr}( (x_i-\mu)(x_i-\mu)^T\Lambda)\\ &=& \dfrac{\partial}{\partial \Lambda} \dfrac{N}{2} \log|\Lambda| - \dfrac{\partial}{\partial \Lambda} \dfrac{1}{2} \sum_{i=1}^N (x_i-\mu)(x_i-\mu)^T\Lambda\\ &=& \dfrac{N}{2} \Lambda^{-T} - \dfrac{1}{2}\sum_{i=1}^N (x_i-\mu)(x_i-\mu)^T = 0 \end{eqnarray*} $$
$$ \dfrac{N}{2} \Lambda^{-T} = \dfrac{1}{2}\sum_{i=1}^N (x_i-\mu)(x_i-\mu)^T $$

$$∴\;\;\;\;공분산 행렬\;\; \Sigma = \dfrac{1}{N}\sum_{i=1}^N (x_i-\mu)(x_i-\mu)^T $$

In [5]:
np.random.seed(0)
mu0 = np.array([0, 1])
sigma0 = np.array([[1, 0.2], [0.2, 4]])

x = sp.stats.multivariate_normal(mu0, sigma0).rvs(1000)

xbar = x.mean(axis=0)
S2 = np.cov(x, rowvar=0)

xbar, S2
Out[5]:
(array([-0.0126996 ,  0.95720206]), array([[ 0.96100921,  0.16283508],
        [ 0.16283508,  3.80507694]]))


Related Posts