[7주차 - Day3] ML_basics - Probability Distributions (Part 1)

2023. 6. 21. 17:12BOOTCAMP/프로그래머스 인공지능 데브코스

밀도추정(Density Estimation): 𝑁개의 관찰데이터(observations) 𝐱1,…𝐱𝑁가 주어졌을 때 분포함수 𝑝(𝐱)를 찾는 것입니다.

  1. 𝑝(𝐱)를 파라미터화된 분포로 가정한다. 회귀, 분류문제에서는 주로 𝑝(𝑡|𝐱), 𝑝(C|𝐱)를 추정한다.
  2. 그다음 분포의 파라미터를 찾는다.
  • 빈도주의 방법(Frequentist's way): 어떤 기준(예를 들어 likelihood)을 최적화시키는 과정을 통해 파라미터 값을 정한다. 파라미터의 하나의 값을 구하게 된다.
  • 베이지안 방법(Bayesian way): 먼저 파라미터의 사전확률(prior distribution)을 가정하고 Bayes' rule을 통해 파라미터의 사후확률(posterior distribution)을 구한다.
  1. 파라미터를 찾았다면(한 개의 값이든 분포든) 그것을 사용해 "예측"할 수 있다(𝑡나 C).

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

 

 

이항변수(Binary Variables): 빈도주의 방법

이항 확률변수(binary random variable) 𝑥∈{0,1} (예를 들어 동전 던지기)가 다음을 만족한다고 합시다.

 

𝑝(𝑥=1|𝜇)=𝜇,𝑝(𝑥=0|𝜇)=1−𝜇

 

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

 

Bern(𝑥|𝜇)=𝜇𝑥(1−𝜇) 1−𝑥

 

기댓값, 분산

  • 𝔼[𝑥]=𝜇
  • var[𝑥]=𝜇(1−𝜇)

우도함수 (Likelihood Function)

𝑥값을 𝑁번 관찰한 결과를 D = {𝑥1,,𝑥𝑁}라고 하자. 각 𝑥가 독립적으로 𝑝(𝑥|𝜇)에서 뽑힌다고 가정하면 다음과 같이 우도함수(𝜇의 함수인)를 만들 수 있습니다.

 

𝑝(D|𝜇) = ∏𝑛=1𝑁𝑝(𝑥𝑛|𝜇)=∏𝑛=1𝑁𝜇𝑥𝑛(1−𝜇) 1−𝑥𝑛

 

빈도주의 방법에서는 𝜇값을 이 우도함수를 최대화시키는 값으로 구할 수 있습니다. 또는, 아래와 같이 로그우도함수를 최대화시킬 수도 있습니다.

 

ln𝑝(D|𝜇)=∑𝑛=1𝑁ln𝑝(𝑥𝑛|𝜇)=∑𝑛=1𝑁{𝑥𝑛ln𝜇+(1−𝑥𝑛) ln(1−𝜇)}

 

𝜇의 최대우도 추정치(maximum likelihood estimate)는

 

𝜇ML = 𝑚𝑁  with  𝑚 = (#observations of 𝑥 = 1)

 

𝑁이 작은 경우에 위 MLE는 과적합(overfitting)된 결과를 낳을 수 있습니다. 𝑁 = 𝑚 = 3 → 𝜇ML = 1!

Uniform Distribution 실습

from scipy.stats import uniform
n = 10000
start = 10
width = 20
data_uniform = uniform.rvs(size=n, loc = start, scale=width)
data_uniform
array([24.38478261, 17.25905322, 26.97027628, ..., 28.53292933, 23.45551369, 19.36967712])
ax = sns.distplot(data_uniform,
                  bins=100,
                  kde=True,
                  color='skyblue',
                  hist_kws={"linewidth": 15,'alpha':1})
ax.set(xlabel='Uniform Distribution ', ylabel='Frequency')