目录
1.判别模型和生成模型
判别模型:判别模型直接学习自变量
x
x
x和因变量
y
y
y之间的关系,这种关系可能是函数
y
=
f
(
x
)
y=f(x)
y=f(x),也可能是条件概率
P
(
y
∣
x
)
P(y|x)
P(y∣x)。
生成模型:生成模型需要先求出自变量和因变量的联合概率分布
P
(
x
,
y
)
P(x,y)
P(x,y),再通过联合概率分布求出条件概率
P
(
y
∣
x
)
=
P
(
x
,
y
)
P
(
x
)
P(y|x)=\frac{P(x,y)}{P(x)}
P(y∣x)=P(x)P(x,y)。朴素贝叶斯属于生成模型。
2.贝叶斯公式
随机变量
X
,
Y
X,Y
X,Y相互独立,它们的联合概率分布为:
P
(
X
,
Y
)
=
P
(
X
)
P
(
Y
)
P(X,Y)=P(X)P(Y)
P(X,Y)=P(X)P(Y)
条件概率为:
P
(
Y
∣
X
)
=
P
(
X
,
Y
)
P
(
X
)
=
P
(
X
∣
Y
)
P
(
X
)
P
(
X
)
P(Y|X)=\frac{P(X,Y)}{P(X)}=\frac{P(X|Y)P(X)}{P(X)}
P(Y∣X)=P(X)P(X,Y)=P(X)P(X∣Y)P(X)
全概率公式为:
P
(
X
)
=
∑
k
P
(
X
∣
Y
k
)
P
(
Y
k
)
,
∑
k
P
(
Y
k
)
=
1
P(X)=\sum_{k}P(X|Y_{k})P(Y_{k}),\sum_{k}P(Y_{k})=1
P(X)=k∑P(X∣Yk)P(Yk),k∑P(Yk)=1
综上,可以推导出贝叶斯公式:
P
(
Y
k
∣
X
)
=
P
(
X
∣
Y
k
)
P
(
Y
k
)
∑
k
P
(
X
∣
Y
k
)
P
(
Y
k
)
P(Y_{k}|X)=\frac{P(X|Y_{k})P(Y_{k})}{\sum_{k}P(X|Y_{k})P(Y_{k})}
P(Yk∣X)=∑kP(X∣Yk)P(Yk)P(X∣Yk)P(Yk)
3.朴素贝叶斯模型
m m m个样本,每个样本有 n n n个特征和一个标签,一共有共有 C C C种类别。
(1)先验概率
类别
C
k
C_{k}
Ck出现的频率
P
(
Y
=
C
k
)
P(Y=C_{k})
P(Y=Ck)称为先验分布,可以从数据中求出:
P
(
Y
=
C
k
)
=
∣
C
k
∣
m
P(Y=C_{k})=\frac{|C_{k}|}{m}
P(Y=Ck)=m∣Ck∣
∣
C
k
∣
|C_{k}|
∣Ck∣为类别为
C
k
C_{k}
Ck的样本数量。
(2)条件概率
当样本的类别为
C
k
C_{k}
Ck时,它的各项维度是确定数值的概率为:
P
(
X
=
x
∣
Y
=
C
k
)
=
P
(
X
1
=
x
1
,
X
2
=
x
2
,
.
.
.
,
X
n
=
x
n
∣
Y
=
C
k
)
P(X=x|Y=C_{k})=P(X_{1}=x_{1},X_{2}=x_{2},...,X_{n}=x_{n}|Y=C_{k})
P(X=x∣Y=Ck)=P(X1=x1,X2=x2,...,Xn=xn∣Y=Ck)
上式求解的要求高,求解过程复杂。因此,在朴素贝叶斯中,假设条件相互独立,则条件概率变为:
P
(
X
=
x
∣
Y
=
C
k
)
=
P
(
X
1
=
x
1
∣
Y
=
C
k
)
P
(
X
2
=
x
2
∣
Y
=
C
k
)
.
.
.
P
(
X
n
=
x
n
∣
Y
=
C
k
)
P(X=x|Y=C_{k})=P(X_{1}=x_{1}|Y=C_{k})P(X_{2}=x_{2}|Y=C_{k})...P(X_{n}=x_{n}|Y=C_{k})
P(X=x∣Y=Ck)=P(X1=x1∣Y=Ck)P(X2=x2∣Y=Ck)...P(Xn=xn∣Y=Ck)
(3)联合概率分布
可以通过先验分布和条件概率求出联合概率分布:
P
(
X
=
x
,
Y
=
C
k
)
=
P
(
X
=
x
∣
Y
=
C
k
)
P
(
Y
=
C
k
)
=
P
(
X
1
=
x
1
∣
Y
=
C
k
)
P
(
X
2
=
x
2
∣
Y
=
C
k
)
.
.
.
P
(
X
n
=
x
n
∣
Y
=
C
k
)
P
(
Y
=
C
k
)
P(X=x,Y=C_{k})=P(X=x|Y=C_{k})P(Y=C_{k})=P(X_{1}=x_{1}|Y=C_{k})P(X_{2}=x_{2}|Y=C_{k})...P(X_{n}=x_{n}|Y=C_{k})P(Y=C_{k})
P(X=x,Y=Ck)=P(X=x∣Y=Ck)P(Y=Ck)=P(X1=x1∣Y=Ck)P(X2=x2∣Y=Ck)...P(Xn=xn∣Y=Ck)P(Y=Ck)
(4)后验概率
当给定一个新样本 X n e w X^{new} Xnew时,只需要求出后验概率 P ( Y = C k ∣ X = X n e w ) P(Y=C_{k}|X=X^{new}) P(Y=Ck∣X=Xnew)最大的即为新样本的类别。
4.目标函数推导
样本
X
=
X
t
e
s
t
X=X^{test}
X=Xtest,在此条件下,求样本的标签
Y
t
e
s
t
Y^{test}
Ytest概率最大的类别:
C
r
e
s
u
l
t
=
arg
max
C
k
P
(
Y
=
C
k
∣
X
=
X
t
e
s
t
)
=
arg
max
C
k
P
(
Y
=
C
k
,
X
=
X
t
e
s
t
)
P
(
X
=
X
t
e
s
t
)
=
arg
max
C
k
P
(
X
=
X
t
e
s
t
∣
Y
=
C
k
)
P
(
Y
=
C
k
)
P
(
X
=
X
t
e
s
t
)
\begin{aligned} C_{result}&=\arg\max_{C_{k}} P(Y=C_{k}|X=X^{test}) \\ &= \arg\max_{C_{k}}\frac{P(Y=C_{k},X=X^{test})}{P(X=X^{test})}\\ &=\arg\max_{C_{k}}\frac{P(X=X^{test}|Y=C_{k})P(Y=C_{k})}{P(X=X^{test})} \end{aligned}
Cresult=argCkmaxP(Y=Ck∣X=Xtest)=argCkmaxP(X=Xtest)P(Y=Ck,X=Xtest)=argCkmaxP(X=Xtest)P(X=Xtest∣Y=Ck)P(Y=Ck)
由于分母
P
(
X
=
X
t
e
s
t
)
P(X=X^{test})
P(X=Xtest)是一个固定的常数,省略后最大化过程变为:
C
r
e
s
u
l
t
=
arg
max
C
k
P
(
X
=
X
t
e
s
t
∣
Y
=
C
k
)
P
(
Y
=
C
k
)
C_{result}=\arg\max_{C_{k}} P(X=X^{test}|Y=C_{k})P(Y=C_{k})
Cresult=argCkmaxP(X=Xtest∣Y=Ck)P(Y=Ck)
朴素贝叶斯假设变量之间条件独立,上式可进一步简化为:
C
r
e
s
u
l
t
=
arg
max
C
k
P
(
Y
=
C
k
)
∏
i
=
1
m
P
(
X
i
=
X
i
t
e
s
t
∣
Y
=
C
k
)
C_{result}=\arg\max_{C_{k}} P(Y=C_{k})\prod_{i=1}^{m}P(X_{i}=X_{i}^{test}|Y=C_{k})
Cresult=argCkmaxP(Y=Ck)i=1∏mP(Xi=Xitest∣Y=Ck)
5.算法流程
(1)求先验概率
先验概率
P
(
Y
=
C
k
)
P(Y=C_{k})
P(Y=Ck),即类别
C
k
C_{k}
Ck出现的概率:
P
(
Y
=
C
k
)
=
m
k
+
λ
m
+
λ
k
P(Y=C_{k})=\frac{m_{k}+\lambda}{m+\lambda k}
P(Y=Ck)=m+λkmk+λ
其中,
m
k
m_{k}
mk为类别
C
k
C_{k}
Ck出现的次数,
m
m
m为总样本数,
k
k
k为总类别数,
λ
\lambda
λ为0或者1,它的作用是防止结果为0。
(2)选择条件概率
选择条件概率
P
(
X
j
=
X
j
t
e
s
t
∣
Y
=
C
k
)
P(X_{j}=X_{j}^{test}|Y=C_{k})
P(Xj=Xjtest∣Y=Ck)的计算公式。
a.当特征
X
j
X_{j}
Xj为离散值时:
P
(
X
j
=
X
j
t
e
s
t
∣
Y
=
C
k
)
=
m
k
j
t
e
s
t
+
λ
m
k
+
O
j
λ
P(X_{j}=X_{j}^{test}|Y=C_{k})=\frac{m_{kj}^{test}+\lambda}{m_{k}+O_{j}\lambda}
P(Xj=Xjtest∣Y=Ck)=mk+Ojλmkjtest+λ
其中,
m
k
j
t
e
s
t
m_{kj}^{test}
mkjtest为类别为
C
k
C_{k}
Ck的样本中,第
j
j
j个维度的特征值等于
X
j
t
e
s
t
X_{j}^{test}
Xjtest的样本数,
O
j
O_{j}
Oj为第
j
j
j个特征的取值个数。
b.当特征
X
j
X_{j}
Xj为连续值时:
P
(
X
j
=
X
j
t
e
s
t
∣
Y
=
C
k
)
=
1
2
σ
k
2
exp
−
(
X
j
−
μ
k
)
2
σ
k
2
P(X_{j}=X_{j}^{test}|Y=C_{k})=\frac{1}{\sqrt{2\sigma_{k}^{2}}}\exp-\frac{(X_{j}-\mu _{k})^{2}}{\sigma_{k}^{2}}
P(Xj=Xjtest∣Y=Ck)=2σk21exp−σk2(Xj−μk)2
其中,
μ
k
\mu _{k}
μk为类别为
C
k
C_{k}
Ck的所有样本的均值,
σ
k
\sigma_{k}
σk为方差。
(3)选择类别
求要本概率最大的类别作为样本的类别:
C
r
e
s
u
l
t
=
arg
max
C
k
P
(
Y
=
C
k
)
∏
i
=
1
n
P
(
X
i
=
X
i
t
e
s
t
∣
Y
=
C
k
)
C_{result}=\arg\max_{C_{k}} P(Y=C_{k})\prod_{i=1}^{n}P(X_{i}=X_{i}^{test}|Y=C_{k})
Cresult=argCkmaxP(Y=Ck)i=1∏nP(Xi=Xitest∣Y=Ck)
6.sklearn实现朴素贝叶斯算法
(1)数据预处理
导入数据,划分数据,标准化数据
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
iris = load_iris()
x,y=iris.data,iris.target
x_train,x_test,y_train,y_test = train_test_split(x,y)
std = StandardScaler()
x_train=std.fit_transform(x_train)
x_test = std.fit_transform(x_test)
print(x_train.shape,x_test.shape)
输出:
(112, 4) (38, 4)
(2)训练和预测
使用先验分布为高斯分布的贝叶斯分类器:
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
model=GaussianNB()
model.fit(x_train,y_train)
y_pred = model.predict(x_test)
print(accuracy_score(y_pred,y_test))
输出:
0.9210526315789473