### 나이브베이지 가정
- 모든 차원의 개별 독립변수가 서로 조건부독립이라는 가정을 사용한다.
- 벡터 x의 결합확률분포함수는 개별 스칼라 원소$x_d$의 확률분포함수의 곱
$$
P(x_1, \ldots, x_D \mid y = k) = \prod_{d=1}^D P(x_d \mid y = k)
$$
- 베이즈정리를 사용하여 조건부확률을 계산

$$
\begin{align}
P(y = k \mid x) 
&= \dfrac{ P(x_1, \ldots, x_D \mid y = k) P(y = k) }{P(x)} \\
&= \dfrac{ \left( \prod_{d=1}^D P(x_{d} \mid y = k) \right) P(y = k) }{P(x)}
\end{align}
$$

### 정규분포 나이브베이즈 모형(`GaussianNB`)
* `theta_`: 정규분포의 기댓값 $\mu$
* `sigma_`: 정규분포의 분산 $\sigma^2$


```python
import scipy as sp
np.random.seed(0)
rv0 = sp.stats.multivariate_normal([-2, -2], [[1, 0.9], [0.9, 2]])
rv1 = sp.stats.multivariate_normal([2, 2], [[1.2, -0.8], [-0.8, 2]])
x0 = rv0.rvs(40)
x1 = rv1.rvs(60)
X = np.vstack([x0,x1])
y = np.hstack([np.zeros(40), np.ones(60)])

```


```python
from sklearn.naive_bayes import GaussianNB
model_norm = GaussianNB().fit(X,y)

```


```python
model_norm.classes_
#클래스 2개
```




    array([0., 1.])




```python
model_norm.class_count_
# 데이터 각각 40개, 60개
```




    array([40., 60.])




```python
model_norm.class_prior_
#y=0일 확률(사전확률)== 0.4, y=1일 확률==0.6
```




    array([0.4, 0.6])




```python
model_norm.theta_[0], model_norm.sigma_[0]
# y-0 일때의 기대값. 분포
```




    (array([-1.96197643, -2.00597903]), array([1.02398854, 2.31390497]))




```python
model_norm.theta_[1], model_norm.sigma_[1]
# y=1 일때의 기대값. 분포
```




    (array([2.19130701, 2.12626716]), array([1.25429371, 1.93742544]))



### X_new =[0,0]이라면 y는 무엇일지 예측하기


```python
x_new = [0,0]
model_norm.predict_proba([x_new])
# y=0일 확률 0.48, y=1일확률 0.51
```




    array([[0.48475244, 0.51524756]])



연습 문제 1
붓꽃 분류문제를 가우시안 나이브베이즈 모형을 사용하여 풀어보자.

(1) 각각의 종이 선택될 사전확률을 구하라.

(2) 각각의 종에 대해 꽃받침의 길이, 꽃받침의 폭, 꽃잎의 길이, 꽃잎의 폭의 평균과 분산을 구하라.

(3) 학습용 데이터를 사용하여 분류문제를 풀고 다음을 계산하라.

분류결과표
분류보고서
ROC커브
AUC


```python
from sklearn.datasets import load_iris
from sklearn.metrics import classification_report
from sklearn.naive_bayes import GaussianNB

iris = load_iris()
X = iris.data
y = iris.target

model_norm = GaussianNB().fit(X,y)
model_norm.class_prior_ #각 클래스의 사전확률
```




    array([0.33333333, 0.33333333, 0.33333333])




```python
model_norm.theta_[0], model_norm.sigma_[0]
```

385cf29666dbdc9583c26b4b6971a47b0ff4f6c3
ipynb
Jupyter Notebook
machine_learning/08_naive_bayes.ipynb
dayoungMM/TIL
b844ef5621657908d4c256cdfe233462dd075e8b
MIT
machine_learning/08_naive_bayes.ipynb
dayoungMM/TIL
b844ef5621657908d4c256cdfe233462dd075e8b
MIT
machine_learning/08_naive_bayes.ipynb
dayoungMM/TIL
b844ef5621657908d4c256cdfe233462dd075e8b
MIT
Qwen/Qwen-72B
1. YES
2. YES