카테고리 없음

[데이터사이언스] pgmpy를 사용한 확률

내일을 따라잡다 2023. 3. 31. 19:44
728x90

확률(probability)

어떤 사건이 일어날 가능성의 정도를 나타내는 척도를 그 사건의 확률이라 하며, 사건이 입력됬을때, 확률값이 출력되는 함수이.

 

확률은 다음과 같은 세가지 규칙을 지켜야한다.

1) 모든 사건에 대해 확률은 실수이고 0 또는 양수다.  $P(A) \leq 0$

2) 표본공간(전체집합)이라는 사건(부분집합)에 대한 확률은 1이다.  $P(\Omega) =1$

3) 공통 원소가 없는 두 사건의 합집합의 확률은 사건별 확률의 합이다. $P(A \cup B) = P(A) + P(B) - PA \cap B)$

 

조건부확률(conditional probability)

사건 B에 대한 사건 A의 조건부확률(conditional probability) 이라고 하며 다음과 같이 정의한다.

\[ P(A|B) = \frac{P(A \cap B)}{P(B)}, P(B)>0 \]

 

독립 (independent)

두 사건 A와 B이 서로 독립일 때 다음과 같이 정의한다.

\[ P(A \cap B) = P(A) \cap P(B) \]

\[ P(B|A) = P(A),   P(A|B) = P(B)\]

 


확률분포(probability distribution)

확률변수는 표본공간에 발생하는 원소를 정의역으로 하고 이에 대응되는 실수값을 치역으로 하는 함수이다.

확률분포는 치역에 대응되는 실수값을 확률로 나타낸 것이다.

 

  • 확률질량함수 (probability mass function; pmf)

사건의 개수가 유한개인 경우, 각 사건에 대한 확률만 정의하는 함수이다. 확률질량함수는 소문자 $p(X)$로 표시한다.

 

  • 누적분포함수(cumulative distribution function; cdf)

사건의 개수가 무한개인 경우, 우리는 구간(interval)로 표현가능하다. 구간 하나를 정의하기 위해서 숫자가 두개가 필요한데, 우리는 숫자 하나만 사용하여 구간을 정의하고 싶다. 그래서 우리는 시작점을 모두 똑같이 음의 무한대로 통일한 특수한 구간 $S_x$를 사용할 것이다.

\[ S_x = \{ - \infty < X \leq x\} \]

 

이러한 사건의 확률분포를 묘사하는 함수를 누적분포함수라 하고 다음과 같이 정의한다.

\[F(x) = P(S_x) = P(\{X < x\})\]

 

다음은 누적분포함수 cdf의 특징이다.

1) 음의 무한대에 대한 누적분포함수값은 0이다.                $F(- \infty) = 0$

2) 양의 무한대에 대한 누적분포함수값은 1이다.                $F(\infty) = 1$

3) 입력이 크면 누적분포함수값은 같거나 커진다.              $x > y \; \rightarrow \; F(x) \leq F(y)$

 

 

  • 확률밀도함수(probability density function)

누적분포함수를 미분하여 구한 도함수를 확률밀도함수라고 하며 확률질량함수와 마찬가지로 $p(x)$로 표기한다.

\[ p(x) = \frac{dF(x)}{dx}\]

\[ F(x_2) - F(x_1) = \int_{x_1}^{x_2} p(u) du \]

 

다음은 확률밀도함수 cdf의 특징이다.

1)적분함수인 누적분포함수의 기울기가 음수가 될 수 없기 때문에 확률밀도함수는 0보다 같거나 크다.          $p(x) \leq 0$

2) $ \int_{- \infty}^{\infty} p(u) du = 1$

 


베이즈 정리(Bayesian rule)

조건부확률을 구하는 다음 공식을 베이즈 정리라고 한다.

\[ P(A|B) = \frac{P(B|A)P(A)}{P(B)} \]

 

proof.

Since $P(A|B) = \frac{P(A \cap B)}{P(B)} \;$ and $\; P(B|A) = \frac{P(A \cap B)}{P(A)}$, 
then $P(A \cap B) = P(A|B)P(B) \;$ and $\; P(A \cap B) = P(B|A)P(A)$. 

Hence, $P(A \cap B) = P(A|B)P(B) = P(B|A)P(A)$.

 

$P(A|B) \;$: 사후확률(posterior). 사건 B가 발생한 후 갱신된 사건 A의 확률
$P(A) \;$: 사전확률(prior). 사건 B가 발생하기 전에 가지고 있던 사건 A의 확률

$P(B|A) \;$: 가능도(likelihood). 사건 A가 발생한 경우 사건 B의 확률
$P(B) \;$: 정규화 상수(normalizing constant) 또는 증거(evidence). 확률의 크기 조정

 

베이즈 정리의 확장 1

만약 사건 $A_i$가 서로 배타적이고 완전하다고 하자.

\begin{align*}
    P(A_1|B) = \frac{P(B|A_1)P(A_1)}{P(B)} \\
     = \frac{P(B|A_1)P(A_1)}{\Sigma_i P(A_i \cap B)} \\
    = \frac{P(B|A_1)P(A_1)}{\Sigma_i P(B|A_i)P(A_i)}
\end{align*}

 

 

파이썬의 피지엠파이 패키지는 베이즈 정리에 적용하는 BayesianModel 클래스를 제공한다. 베이즈 정리를 적용하려면 조건부확률을 구현하는 TabularCPD 클래스를 사용하여 사전확률과 가능도를 구현해야 한다. TabularCPD 클래스 객체는 다음과 같이 만들 수 있다.

    TabularCPD(variable, variable_card, value, evidence=None, evidence_card=None)
  • variable : 확률변수의 이름 문자열
  • variable_card : 확률변수가 가질 수 있는 경우의 수
  • value : 조건부확률 배열. 하나의 열(column)이 동일 조건을 뜻하므로 하나의 열의 확률 합은 1이어야 한다.
  • evidence : 조건이 되는 확률변수의 이름 문자열의 리스트
  • evidence_card : 조건이 되는 확률변수가 가질 수 있는 경우의 수의 리스트

TabularCPD 클래스는 원래는 조건부확률을 구현하기 위한 것이지만 evidence=None , evidence_card=None 으로 인수를 주면 일반적인 확률도 구현할 수 있다.