Bayes' theorem
Conditional probability를 활용하여 $P(A\cap B)$ 를 쓰면 다음과 같다.
$P(A\cap B) = P(A \vert B)P(B) = P(B \vert A)P(A)$
위 수식의 의미는, 사건 A와 사건 B가 함께 일어날 확률은 사건 A가 일어나고 사건 B가 일어나거나, 사건 B가 일어나고 사건 A가 일어날 확률로 쓸 수 있다는 것이다.
위의 수식을 이용하면 $P(A \vert B)$를 다음과 같이 쓸 수 있다.
$P(A \vert B) = \frac{P(B \vert A)P(A)}{P(B)}$
이 수식을 베이즈 정리라 한다.
용어 정리
위 수식을 활용하기 위해 A를 가설, B를 데이터라 하면,
$P(hypothesis \vert data) = \frac{P(data \vert hypothesis)P(hypothesis)}{P(data)}$
라 쓸 수 있다.
$P(hypothesis \vert data)$ : posterior probability(사후확률)라 하며, 주어진 데이터 하에 가설이 참일 확률을 의미한다.
$P(data \vert hypothesis)$ : 가설 하의 데이터의 likelihood이다.
$P(data)$ : marginal probability
$P(hypothesis)$ : Prior probability(사전확률)로 가설에 대한 초기 믿음을 나타낸다.
Naive Bayes' Classifier
입력 feature $\vec{x}$를 통해 class $y$를 유추하는 모델을 생각해보면 베이즈 정리에 의해 다음과 같이 쓸 수 있다.
$P(y_j \vert \vec{x}) = \frac{P(\vec{x} \vert y_j)P(y_j)}{P(y_j}$
우항의 분모를 다시 쓰면,
$P(\vec{x} \vert y_j)P(y_j) = P(x_1 \vert x_1, \dots, x_n, y_j)$
이며, $x_i$가 서로 독립이라는 가정을 하면(강력한 가정이며 이 때문에 Naive Bayes' classifier이다),
$P(\vec{x} \vert y_j)P(y_j) = P(x_1 \vert y_j)P(x_2 \vert y_j) \dots P(x_n \vert y_j)P(y_j) = \prod_k P(x_k \vert y_j)P(y_j)$
라 쓸 수 있다.
이 때, 주어진 feature $\vec{x}$에 대한 예측 클래스 $\hat{y}$ 는 다음과 같다.
$\hat{y} = \underset{y_j}{argmax} \prod_k P(x_k \vert y_j)P(y_j)$
Laplace Smoothing
위 모형의 문제는 샘플의 개수가 적을 때 $P(x_i \vert y_j) = 0$ 이 생기는 문제가 발생할 수 있다. 즉, 데이터 기반으로 likelihood를 계산하다보니 등장하지 않은 데이터에 대해서는 class $y_j$일 확률이 아예 없다고 하는 강력한 모형이 만들어지는 것이다. 이러한 강력한 모형은 바람직 하지 않으므로
$P(x_i \vert y_j) = \frac{\mbox{# number of }x_i + cP(x_i}{\mbox{# of } y_j + c}$
와 같이, 아주 작은 값을 분모와 분자에 더해줘 확률이 0이 되는 것을 피한다.
Application with Iris dataset
붓꽃 분류 데이터를 활용하여 실습해 보겠습니다. 해당 데이터에서 feature는 4개로 ['sepal length', 'sepal width', 'petal length', 'petal width'] 이고, class는 [0,1,2] 세개로 주어집니다.
주어진 데이터에 맞게 각 확률을 구해주면 됩니다. 또한, 계산의 편의성을 위해 모든 인풋값을 반올림하여 사용하였습니다. 연속값을 사용하는 경우에는 특정 구간의 데이터 개수를 세면 됩니다.
Prior probability : 모든 클래스의 데이터가 각 50개씩 주어지므로 1/3으로 했습니다.
Marginal probability : $[x_1, x_2, x_3, x_4]$ 의 개수를 센 후, 전체 개수로 나누어주면 각 인풋 데이터에 맞는 Marginal probability가 됩니다.
Likelihood : $P(x_i \vert y)$ 의 개수를 세어 확률을 측정합니다.
코드는 깃허브를 참조해주세요.
SunggookCHOI/Laboratory
개인 학습의 기록. Contribute to SunggookCHOI/Laboratory development by creating an account on GitHub.
github.com
학습과 테스트 데이터는 8:2로 나누었으며, 30개의 테스트셋에 대해 약 93%의 정확도를 보이는 것을 확인할 수 있습니다.
'ML > 이론' 카테고리의 다른 글
Least-Mean-Square Algorithm (0) | 2020.03.09 |
---|---|
Maximum a posteriori estimation (0) | 2020.03.03 |