[패스트캠퍼스 환급챌린지]딥러닝/Chapter 1. 통계

[패스트캠퍼스][환급 챌린지]Chapter 1. 딥러닝을 위한 통계 01-13 확률분포의 추정

포리셔 2023. 3. 4. 22:37

01-13 확률분포의 추정

지금까지는 확률분포가 주어져 있을 때 이를 이용한 확률의 계산과 그와 관련된 통계적인 지식을 배웠습니다. 하지만 현실에서는 확률분포함수로부터 나온 데이터만을 알 수 있는 경우가 많습니다. 따라서 데이터로부터 확률분포함수를 역으로 알아내는 과정이 필요하며, 이 일련의 과정을 추정(estimation)이라고 합니다.

추정과 기본적인 방법

def) 추정 (estimation): 가지고 있는 데이터로부터 확률분포를 추정하는 기술
궁극적으로 우리는 현재 주어진 데이터 이외의 데이터까지도 포괄적으로 설명해주는 확률분포를 아는 것이 목적입니다. 따라서 현재 주어진 데이터는 확률변수의 분포를 계산하여 추정하기 위한 도구로 보시면 되겠습니다.

사실 덮어놓고 데이터를 이용해 확률분포를 계산할 수는 없기 때문에, 계산하기 전에 데이터의 형태를 보고 원하는 분포로 추정하는 것이 가능합니다. 몇 가지 예시를 정리해보면...

  • 베르누이 분포: 데이터가 0과 1로 표현되는 이진 형태일 때 (혹은 이항분포)
  • 정규분포: 데이터의 크기 제한이 없는 실수 형태일 때
  • 카테고리 분포: 모든 데이터가 특정한 분류에 의해 나뉘어지는 카테고리 값일 때

정도가 있겠네요. 그 외의 경우, 일반론적인 접근으로는

  1. 모멘트(Moment) 방법
  2. 최대우도(가능도) 방법

이 있습니다. 두 방법 모두 추정에서 자주 사용되는 개념이라고 하니 필히 숙지해야 겠습니다. 일단 이번 포스트에서는 모멘트 방법을 설명하도록 하겠습니다.

모멘트

def) 모멘트 (Moment): 확률분포에서 계산한 특징값의 일종, a.k.a. 적률
$$M_n = E\left[X^n\right] = \int_{-\infty}^{\infty} x^nf\left(x\right)\ dx$$
어떤 확률분포의 $n$차 모멘트는 위 식과 같이 정리됩니다. 위 식의 $x^nf\left(x\right)$에서 $n=1$일 때의 1차 모멘트는 평균, $n=2$일 때의 2차 모멘트는 분산과 같습니다. 이는 확률변수의 $n$차 모멘트는 확률분포에 대한 통계적 정보를 담고 있음을 의미합니다. 더 나아가서, 1차부터 $n\rightarrow\infty$ 까지의 모멘트가 모두 동일할 경우 두 확률변수에 대한 확률분포는 서로 동일합니다.

그러면 모멘트 방법으로 정규분포의 모수(parameter)를 추정하는 방법을 알아보겠습니다.

import numpy as np
import matplotlib.pyplot as plt
X = np.array([3, 5, 7, 10, 6, 6, 3]) # 각 영어성적 등급을 받은 학생 수
Y = np.array(range(7)) + 1 # 학생들의 등급
x_mean = np.sum([X[i]*Y[i] for i in range(len(X))])/np.sum(X)
x_var = np.sum([(Y[i]-x_mean)**2*X[i] for i in range(len(X))])/np.sum(X)
std = np.sqrt(x_var)

print(f"Mean: {x_mean:.3f}")
print(f"Variance: {x_var:.3f}")
print(f"Standard deviation: {std:.3f}")
Mean: 4.025
Variance: 2.774
Standard deviation: 1.666

여기서 우리는 평균과 분산을 구할 수 있기 때문에 이 확률변수의 1차 및 2차 모멘트를 알고 있는 셈이 됩니다. 정규분포는 평균과 분산을 모수로 취하므로, 이것만으로도 곧장 정규분포를 구할 수 있습니다. 아래의 그림을 보면 알 수 있듯이 우리가 알고 있는 정규분포의 형태로 곡선의 개형이 나오는 것을 확인할 수 있습니다.

plt.figure(figsize=(10, 8))
x = np.linspace(x_mean-10, x_mean+10, 100)
y = (1/np.sqrt(2*np.pi)*std) * np.exp(-1/(2*(std**2)) * ((x-x_mean)**2))
plt.plot(x, y)
plt.xlabel('$x$')
plt.ylabel('$f_X(x)$')
plt.grid()
plt.show()

13일차 후기

2주차가 끝나갑니다. 달리 말하면 한 달 간의 환급 챌린지가 내일이면 반환점을 찍는다는 뜻! 페이스 유지 잘 해서 완강 가보겠습니다.

http://bit.ly/3Y34pE0

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.