<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 나이브 베이즈 분류 모형
Step1:  1) 베르누이 분포 나이브 베이즈 모형
4개의 동전을 10번 던졌고, 클래스 0에 해당하는 곳이 3개, 클래스 1에 해당하는 곳이 7개 이다. 만약 x_new 값으로 [1,1,1,0] 일때 그것이 클래스 0과 클래스 1에 해당할 확률을 구해라.
Step2:  2) 다항 분포 나이브 베이즈 모형
위의 X, y는 동일한데 다항분포를 활용해서 x_new = [10,15,29,32] 일 경우, 그것이 클래스 0에 속할 확률과 클래스 1에 속할 확률을 구해라.
Step3:  3) 가우시안 정규 분포 나이브 베이즈 모형
<ASSISTANT_TASK:>
Python Code:
# sklearn
# classes_ ; 타겟 Y 의 클래스(라벨)
# class_count_ ; 타켓 Y 의 값이 특정한 클래스인 표본 데이터의 수
# feature_count_ ; 1) 베르누이 분포 ;
#                  2) 다항분포 ;           
# class_prior_ (가우시안 정규분포) ; P(Y)
# class_log_prior_ (베르누이, 다항 분포) ; log P(Y)
# theta_, sigma_ (가우시안 정규분포)
# feature_log_prob_ (베르누이, 다항 분포)
# predicet_proba(x_new) ; P(Y|Xnew)
Explanation: 나이브 베이즈 분류 모형
End of explanation
import numpy as np
from sklearn.naive_bayes import BernoulliNB
X = np.random.randint(2, size=(10, 4))
y = np.array([0,0,0,1,1,1,1,1,1,1])
print(X)
print(y)
clf_bern = BernoulliNB().fit(X, y)
clf_bern.classes_
clf_bern.class_count_
clf_bern.feature_count_
theta = np.exp(clf_bern.feature_log_prob_)
theta
x_new = np.array([1,1,1,0])
clf_bern.predict_proba([x_new])
Explanation: 1) 베르누이 분포 나이브 베이즈 모형
4개의 동전을 10번 던졌고, 클래스 0에 해당하는 곳이 3개, 클래스 1에 해당하는 곳이 7개 이다. 만약 x_new 값으로 [1,1,1,0] 일때 그것이 클래스 0과 클래스 1에 해당할 확률을 구해라.
End of explanation
from sklearn.naive_bayes import MultinomialNB
clf_mult = MultinomialNB().fit(X, y)
clf_mult.classes_
clf_mult.class_count_
clf_mult.feature_count_
theta = np.exp(clf_mult.feature_log_prob_)
theta
x_new = np.array([10,15,29,32])
clf_mult.predict_proba([x_new])
Explanation: 2) 다항 분포 나이브 베이즈 모형
위의 X, y는 동일한데 다항분포를 활용해서 x_new = [10,15,29,32] 일 경우, 그것이 클래스 0에 속할 확률과 클래스 1에 속할 확률을 구해라.
End of explanation
from sklearn.naive_bayes import GaussianNB
# 학생 0 의 시험성적
X00 = sp.stats.norm(70, 10).rvs(10)
X01 = sp.stats.norm(80, 5).rvs(10)
X02 = sp.stats.norm(100, 5).rvs(10)
X03 = sp.stats.norm(40, 5).rvs(10)
# 학생 1 의 시험성적
X10 = sp.stats.norm(90, 10).rvs(10)
X11 = sp.stats.norm(75, 5).rvs(10)
X12 = sp.stats.norm(60, 5).rvs(10)
X13 = sp.stats.norm(50, 10).rvs(10)
# 학생 2 의 시험성적
X20 = sp.stats.norm(60, 10).rvs(10)
X21 = sp.stats.norm(55, 5).rvs(10)
X22 = sp.stats.norm(100, 5).rvs(10)
X23 = sp.stats.norm(25, 10).rvs(10)
# Case 1)
X0 = np.vstack([X00, X01, X02, X03]).T
X1 = np.vstack([X10, X11, X12, X13]).T
X2 = np.vstack([X20, X21, X22, X23]).T
X = np.vstack([X0, X1, X2])
# 학생(=클래스) 구분하기
y0 = np.zeros(10)
y1 = np.ones(10)
y2 = np.ones(10) * 2
y = np.hstack([y0,y1,y2])
np.shape(X0)
np.shape(X)
np.shape(y)
clf_norm = GaussianNB().fit(X, y)
clf_norm.classes_
clf_norm.class_count_
clf_norm.class_prior_
clf_norm.theta_
clf_norm.sigma_
x_new = np.array([70, 60, 75, 35])
clf_norm.predict_proba([x_new])
Explanation: 3) 가우시안 정규 분포 나이브 베이즈 모형
End of explanation
<END_TASK>