In [105]:
# 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)
In [7]:
import numpy as np
from sklearn.naive_bayes import BernoulliNB
In [6]:
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)
In [8]:
clf_bern = BernoulliNB().fit(X, y)
In [9]:
clf_bern.classes_
Out[9]:
In [10]:
clf_bern.class_count_
Out[10]:
In [11]:
clf_bern.feature_count_
Out[11]:
In [16]:
theta = np.exp(clf_bern.feature_log_prob_)
theta
Out[16]:
In [17]:
x_new = np.array([1,1,1,0])
In [19]:
clf_bern.predict_proba([x_new])
Out[19]:
In [20]:
from sklearn.naive_bayes import MultinomialNB
In [21]:
clf_mult = MultinomialNB().fit(X, y)
In [22]:
clf_mult.classes_
Out[22]:
In [23]:
clf_mult.class_count_
Out[23]:
In [24]:
clf_mult.feature_count_
Out[24]:
In [27]:
theta = np.exp(clf_mult.feature_log_prob_)
theta
Out[27]:
In [28]:
x_new = np.array([10,15,29,32])
In [29]:
clf_mult.predict_proba([x_new])
Out[29]:
In [55]:
from sklearn.naive_bayes import GaussianNB
In [104]:
# 학생 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])
In [102]:
np.shape(X0)
Out[102]:
In [103]:
np.shape(X)
Out[103]:
In [79]:
np.shape(y)
Out[79]:
In [80]:
clf_norm = GaussianNB().fit(X, y)
In [81]:
clf_norm.classes_
Out[81]:
In [82]:
clf_norm.class_count_
Out[82]:
In [83]:
clf_norm.class_prior_
Out[83]:
In [84]:
clf_norm.theta_
Out[84]:
In [85]:
clf_norm.sigma_
Out[85]:
In [86]:
x_new = np.array([70, 60, 75, 35])
In [87]:
clf_norm.predict_proba([x_new])
Out[87]: