MLE의 기본 IDEA
관찰한 데이터를 가장 잘 설명하는 확률분포(모델)의 모수를 구해보자
- 우리가 실험한 결과(관찰치)를 가장 잘 설명해줄 수 있는 가능성이 높은 추정량을 모수의 추정량으로 택하는 방법
1. Estimation (추정)
- 데이터셋(모집단)의 특성을 나타내는 모수를 추정 ex) 정규분포 -> 평균, 분산, 베르누이 분포 -> 성공 확률 p
- 유한한 개수의 데이터만 관찰해서 모집단의 분포를 정확하게 알아낸다는 것은 불가능하므로, 근사적으로 확률분포를 추정할 수 밖에 없다.
2. Likelihood (가능도)
- 우리가 실험한 결과(관찰치)가 가정한 확률분포에 대응하는 모수의 값으로 설명될 수 있는 가능성을 가지고 추정
\begin{align*} L(\theta;x_{0} = 1) = P(x_{0} = 1|\theta) \end{align*}
세미클론(;)을 써야할까?? (|를 사용해도 무관하다)
등식 양변에 있는 \(x = 1|\theta\) 의 위치가 바뀌어 있는 이유
(데이터가 주어졌을 때 그때의 모수) <- 가능도의 관점
(모수가 주어졌을때 데이터가 그 안에 있을 확률) <-확률함수 관점
3. Maximum (최대)
- 가능도가 최대값이 될때 우리가 실험한 결과가 가정한 확률분포에 대응하는 모수의 값을 설명될 가능성이 가장높기 때문
$$ \hat{\theta}_{MLE} = argmax_{\theta}L(\theta;x_0=1) $$
어떻게 최대값을 찾을 수 있을까??
-> 미분계수 = 0 을 이용
찾고자 하는 \(\theta\)에 대하여 로그를 취한 로그가능도함수를 편미분 -> 0이 되는 \(\theta\)를 찾기
<로그를 사용하는 이유>
1. 데이터 숫자의 크기를 확 줄여줌
2. 곱셈과 나눗셈을 덧셈과 뺄셈으로 바꿔줌
3. 확률 값의 범위를 확장해주어 데이터를 수월하게 비교해줌 [0,1] -> (-inf, 0]
<결론>
최대가능도 추정법에 의한 정규분포의 기댓값
= 표본평균(\(\bar{X}\))
최대가능도 추정법에 의한 정규분포의 분산(자유도가 아닌 데이터의 수로 나눈 편향)
= 표본분산(\(s^2\))
<코드를 통한 MLE 구현>
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
from scipy.stats import norm #정규분포식을 표현해주는 함수
plt.figure(figsize=(10,6))
x = np.linspace(-5, 5, 1000) #x축을 정의(구간 시작점, 구간끝점, 구간 내의 숫자 개수)
p1 = sp.stats.norm(loc=-1).pdf(1) #모수가 -1일때, 1에서의 가능도, loc = 평균 scale = 표준편차
p2 = sp.stats.norm(loc=0).pdf(1) #모수가 0일때, 1에서의 가능도
p3 = sp.stats.norm(loc=1).pdf(1) #모수가 1일때, 1에서의 가능도
plt.scatter(1, p1, s=100, c='blue', marker='v',
label=r"$N(x_1;\mu=-1)$={:.2f}".format(np.round(p1, 2)))
plt.scatter(1, p2, s=100, c='orange', marker='^',
label=r"$N(x_1;\mu=0)$={:.2f}".format(np.round(p2, 2)))
plt.scatter(1, p3, s=100, c='green', marker='s',
label=r"$N(x_1;\mu=1)$={:.2f}".format(np.round(p3, 2)))
# TODO 4-1, 4-2, 4-3 solution
plt.plot(x, sp.stats.norm(loc=-1).pdf(x), ls="-.")
plt.plot(x, sp.stats.norm(loc=0).pdf(x), ls="--")
plt.plot(x, sp.stats.norm(loc=1).pdf(x), ls="-")
plt.scatter(1, 0, s=100, c='k')
plt.vlines(1, -0.09, 0.45, linestyle=":")
plt.hlines(0, -5, 5, colors='gray', linestyle="-")
plt.text(1-0.3, -0.15, "$x_0=1$")
plt.xlabel("x")
plt.ylabel("likelihood")
plt.legend()
plt.title("MLE for population mean")
plt.show()
x0=1
# TODO 4-4, 4-5, 4-6 solution
#평균이 -1 이고 x_0가 1일때 가능도를 계산하는 코드
print('mu=-1: likelihood at x_0=1 is {:.4f}'.format(norm.pdf(x0, -1, 1))) # x, loc(mu), stats(sigma), 1은 분산값
print('mu=0: likelihood at x_0=1 is {:.4f}'.format(norm.pdf(x0, 0, 1)))
print('mu=1: likelihood at x_0=1 is {:.4f}'.format(norm.pdf(x0, 1, 1)))
x
|
확률변수값
|
|
loc
|
평균(μ)
|
|
scale
|
표준편차(σ)
|
'Math' 카테고리의 다른 글
[AI Math][심화] Gradient Descent (0) | 2022.10.04 |
---|---|
[AI Math]모수 와 (표집분포, 표본분포, 모집단)의 기대값과 분산 (0) | 2022.09.26 |
[AI Math]Monte Carlo Sampling(몬테카를로 샘플링) (0) | 2022.09.22 |
[AI Math]L1- norm, L2-norm 에 관하여 (0) | 2022.09.22 |