2023. 6. 21. 17:12ㆍBOOTCAMP/프로그래머스 인공지능 데브코스
밀도추정(Density Estimation): 𝑁개의 관찰데이터(observations) 𝐱1,…𝐱𝑁가 주어졌을 때 분포함수 𝑝(𝐱)를 찾는 것입니다.
- 𝑝(𝐱)를 파라미터화된 분포로 가정한다. 회귀, 분류문제에서는 주로 𝑝(𝑡|𝐱), 𝑝(C|𝐱)를 추정한다.
- 그다음 분포의 파라미터를 찾는다.
- 빈도주의 방법(Frequentist's way): 어떤 기준(예를 들어 likelihood)을 최적화시키는 과정을 통해 파라미터 값을 정한다. 파라미터의 하나의 값을 구하게 된다.
- 베이지안 방법(Bayesian way): 먼저 파라미터의 사전확률(prior distribution)을 가정하고 Bayes' rule을 통해 파라미터의 사후확률(posterior distribution)을 구한다.
- 파라미터를 찾았다면(한 개의 값이든 분포든) 그것을 사용해 "예측"할 수 있다(𝑡나 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')
'BOOTCAMP > 프로그래머스 인공지능 데브코스' 카테고리의 다른 글
[7주차 - Day5] ML_basics - 실습 (0) | 2023.06.22 |
---|---|
[7주차 - Day4] ML_basics - Probability Distributions (Part 2) (0) | 2023.06.22 |
[7주차 - Day2] ML_basics - Decision Theory & Linear Regression (0) | 2023.06.21 |
[7주차-Day1] ML_basics - Probability (0) | 2023.06.21 |
[6주차 - Day5] k-Nearest Neighbor classifier 실습 (0) | 2023.06.20 |