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

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

포리셔 2023. 2. 22. 23:44

들어가기 전에...

오늘 글을 쓰고 나서야 첫번째 글 제목에 Part, Chapter를 거꾸로 썼다는 걸 알았습니다... 게다가 글 제목에 걸려있는 01-03은 오늘 정리해서 올립니다...
아... 신경쓰이게....;;

01-03 이산확률분포

앞선 장에서 간단하게 이산확률분포와 연속확률분포가 어떤 개념인지만 짚고 넘어갔습니다. 확률변수 $X$를 셀 수 있으면 이산확률분포, 무한히 많아서 셀 수 없으면 연속확률분포로 볼 수 있다고 했습니다. 먼저 이산확률분포에 관련된 개념부터 정리하겠습니다.

이산확률분포와 확률질량함수

def) 이산확률분포(Discrete Probability Distribution): 이산확률변수의 확률 분포
확률질량함수(Probability Mass Function, PMF): 이산확률변수가 특정한 값을 가질 확률을 나타내는 함수

주사위 2개를 동시에 던지는 시행에서 두 눈금의 합을 확률변수 $X$로 놓으면, $X$는 2에서 12까지의 값을 가질 수 있고, 그 개수를 셀 수 있습니다(2 ~ 12까지 총 11개). 그러면 이 확률변수 $X$에 대한 확률질량함수 $f_X\left(x\right)$는 다음과 같이 표현될 것입니다.
$$f_X\left(2\right) = P\left(X=2\right)=\frac{1}{36}$$
$$f_X\left(3\right) = P\left(X=3\right)=\frac{2}{36}=\frac{1}{18}$$
$$\vdots$$
$$f_X\left(12\right) = P\left(X=12\right)=\frac{1}{36}$$

ML에서의 확률질량함수

ML 모델의 입력으로 들어갈 이미지를 확률변수 $X$로 놓으면, $X$는 설령 그 수가 매우 많다고 해도 개별적으로 셀 수 있는 변수이므로 이산확률변수로 볼 수 있습니다. 이 이미지가 고양이인지 강아지인지 판단하는 모델이라고 해보면, 확률질량함수 즉 각 케이스 별 확률은 두 가지 경우에 대해 아래와 같이 나온다고 해봅시다.
$$P\left(Y=고양이|X=x\right)=0.35$$
$$P\left(Y=강아지|X=x\right)=0.65$$
이 때 $P\left(Y|X\right)$는 $X$가 주어졌을 때의 또다른 확률변수 $Y$에 대한 확률분포를 의미합니다. 정식 명칭은 조건부 확률이라고 하는데, 이것도 나중에 배울 테니 일단 넘어가도록 하죠. $Y$가 결과, 흔히 말하는 클래스(class)라고 하면, 입력 이미지 $X$가 어떤 클래스일 확률이 얼마나 되는 지를 결과로 출력하는 겁니다.

베르누이 분포

def) 베르누이 시행(Bernoulli Trial): 결과가 둘 중 하나로만 나오는 시행
동전을 던지면 앞면 또는 뒷면 중 하나만 나옵니다. 어찌저찌 옆면으로 선 건 신경쓰지 맙시다 이와 같이 결과가 둘 중 하나로만 결정되는 시행을 베르누이 시행이라고 합니다. 이 시행의 결과를 0 또는 1로 나타내면, 확률변수가 2개로 셀 수 있으므로 이산확률변수에 해당합니다. 이러한 베르누이 확률변수의 분포를 베르누이 확률분포라고 하며, 어떤 확률변수 $X$가 베르누이 확률분포를 따른다면 아래와 같이 표기하곤 합니다.
$$X\sim Bern\left(x;\mu\right)$$
여기서 $\mu$는 모수(parameter)를 의미하는 기호로, 1이 나올 확률을 의미합니다. 흔히 기호로 표기할 때는 세미콜론(;)으로 표기하고, ML 모델을 이와 같은 모수의 형태로 표현할 수 있습니다. 이유인 즉, 1이 나올 확률인 모수 $\mu$가 변화함에 따라서 그 확률분포가 달라지기 때문입니다. 이 변화를 수식으로 정리하면 아래의 두 가지 중 한 가지로 표현할 수 있겠습니다.
$$Bern\left(x;\mu\right)=
\begin{cases}
\mu, & \mathrm{if}\ x=1 \\
1 - \mu, & \mathrm{if}\ x=0
\end{cases}$$
$$Bern\left(x;\mu\right)=\mu^x\left(1-\mu\right)^{1-x}$$

이항분포

def) 이항분포(Binomial Distribution): 연속된 $N$회의 독립적 시행에서 각 시행이 확률 $\mu$를 가질 때의 이산확률분포
$$X\sim\left(x;N,\mu\right)$$
베르누이 분포를 $N$회만큼 확장시키면 이항분포로 발전합니다. 이항분포의 모수는 시행 횟수 $N$과 확률 $\mu$의 두 가지입니다. 이 때의 확률질량함수는 정의에 충실하게도 아래와 같이 표현할 수 있습니다.
$${N \choose x}\times\mu^x\times\left(1-\mu\right)^{N-x}$$
여기서 ${N \choose x}$는 $N$번 중 $x$번 1이 나오는 횟수이므로 조합 $NC_r$이 되겠습니다.

푸아송 분포 (또는 포아송 분포)

def) 푸아송 분포(Poisson Distribution): 일정한 시간 내에 발생하는 사건의 발생 횟수에 대한 확률분포
이산확률변수에 시간 개념이 더해지면 푸아송 분포로 발전합니다. 이 확률분포는 단위 시간 (더 엄밀히는 단위 공간에서도 가능) 당 어떤 사건이 발생할 확률을 나타내며, 시행 횟수 $N$이 충분히 크고 확률 $\mu$가 충분히 작아서 $n\mu$의 값이 적당할 때의 이항분포의 값을 근사적으로 구할 수 있다는 특징이 있습니다. 설령 $n$과 $\mu$ 각각의 값을 알지 못하더라도 $n\mu=\lambda$를 만족하는 어떤 실수 $\lambda$가 존재하고, $n\rightarrow \infty$일 때 $n\mu=\lambda$로 수렴한다면, 해당 이항분포의 근사치를 알 수 있습니다. 이때, $\lambda$는 어떤 사건이 일어날 때의 기대값으로, 푸아송 분포의 평균을 나타냅니다. 따라서 푸아송 분포의 모수로 나타낼 수도 있겠죠? 그러면, 확률밀도함수는 다음과 같이 주어집니다.
$$f\left(x;\lambda\right)=\frac{e^{-\lambda}\lambda^x}{x!}$$

파이썬에서의 구현

그럼 이 분포들을 파이썬을 통해 나타내보도록 하겠습니다. 파이썬에서 가장 유명한 라이브러리 중 하나인 NumPy와 SciPy 등에는 통계 분석을 지원하기 위한 메서드가 여럿 있는데 이번 포스트에선 그 중에서 넘파이를 써서 이항분포를 표현해보겠습니다. 주어진 상황은 동전 앞면이 나올 때를 0, 뒷면이 나올 때를 1로 놓고, $N$번 던졌을 때의 확률이 어떻게 변화하는지를 계산해보겠습니다. 아래 코드와 그래프에서 $p$는 모수 $\mu$와 동일하게 확률을 의미합니다. 넘파이의 random 패키지에 있는 binomial 메서드를 활용하면 편리합니다.

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(123)
n_values = [5, 10, 50, 100, 500, 1000]
p_values = []
for n_ in n_values:
    nums = np.random.binomial(n=1, p=0.5, size=n_)
    p_ = np.count_nonzero(nums==0)/len(nums)
    print(f"n={n_}, p={p_}")
    p_values.append(p_)

plt.plot(n_values, p_values, 'b-')
plt.title('Binomial distribution\nHead=0, tail=1, '+r'p=$\frac{1}{2}$')
plt.ylabel('$p$')
plt.xlabel('N')
plt.grid()
plt.plot(n_values, 0.5*np.ones(6), 'k--')
plt.show()

$N$의 값을 5에서 시작해 1000까지 늘리고 그 확률이 변화하는 그래프를 그려봤습니다. $N$이 작을 때는 그 확률이 수학적으로 계산한 확률인 1/2보다 컸지만, $N$이 증가함에 따라 우리의 예상치인 1/2에 점점 더 가까워지는 모습입니다.

다음으로 푸아송 분포입니다. 푸아송 분포도 마찬가지로 random 패키지의 poisson 메서드를 사용해보겠습니다.

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(123)
s = np.random.poisson(5, 1000)
plt.hist(s, 14)
plt.title('Poisson distribution\n'+r'$\lambda$'+'=5, N=1000')
plt.grid()
plt.show()

$\lambda=5$일 때 1000회의 시행에서의 확률분포를 푸아송 분포로 나타내었습니다.

3일차 후기

오늘 페이스면 2개도 들을 수 있겠는데?
...라고 생각했던 어제의 저를 반성합니다... 현생의 무게야....

하나라도 제대로 듣고 공부합시다 여러분 결국 핵심은 코딩....흑...

http://bit.ly/3Y34pE0

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

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

fastcampus.co.kr](http://bit.ly/3Y34pE0)

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

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

fastcampus.co.kr](http://bit.ly/3Y34pE0)

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