朴素贝叶斯算法
贝叶斯公式:当我们知道结果的时候,想知道最可能导致这个结果的原因
在这个公式里面,类别就是原因,特征就是结果(因为是这个类别,所以有这些特征?)
其中P(类型|特征) 称为后验概率,P(类别)称为先验概率,P(特征|类别)叫做似然概率,P(特征)叫做证据(后面讲为什么可以忽略)
那么想要求得P(类别|特征),那么就要求得p(类别)和p(特征|类别),前者容易,类别数除以总数即可
后者则比较麻烦,我们需要引入另一个概念——独立
朴素贝叶斯算法的朴素二字,意思是说,所有特征是相互独立的,比如硬币投掷,出现正面和反面的相互独立、互不干扰的。
在这样的条件下,有
P
(
x
1
,
x
2
,
.
.
.
,
x
n
∣
类
别
)
=
P
(
x
1
∣
类
别
)
∗
P
(
x
2
∣
类
别
)
∗
.
.
.
∗
P
(
x
n
∣
类
别
)
P(x1,x2,...,xn|类别) = P(x1|类别)*P(x2|类别)*...*P(xn|类别)
P(x1,x2,...,xn∣类别)=P(x1∣类别)∗P(x2∣类别)∗...∗P(xn∣类别)
那么,假如特征满足相互独立的条件,我们又如何求得P(x1|类别)(其它类似),目前有两种办法
一是高斯分布假设。意思是说,在该类别下,x1是服从高斯分布的,那么
P
(
x
1
∣
类
别
)
=
1
2
π
σ
∗
e
(
x
1
−
u
)
2
σ
2
P(x1|类别) = \frac{1}{\sqrt{2\pi}\sigma}*e^{\frac{(x1-u)^2}{\sigma^2}}
P(x1∣类别)=2πσ1∗eσ2(x1−u)2
其中u为样本均值,sigma为样本方差
为了防止sigma为0的情况导致程序错误,需要在方差上增加一个平滑值
P
(
x
1
∣
类
别
)
=
1
2
π
(
σ
+
b
i
a
s
)
∗
e
(
x
1
−
u
)
2
(
σ
+
b
i
a
s
)
2
P(x1|类别) = \frac{1}{\sqrt{2\pi}(\sigma+bias)}*e^{\frac{(x1-u)^2}{(\sigma+bias)^2}}
P(x1∣类别)=2π(σ+bias)1∗e(σ+bias)2(x1−u)2
二是多项式法求解,公式如下
P
(
类
别
)
=
N
(
类
别
)
N
(
样
本
)
P(类别) = \frac{N(类别)}{N(样本)}
P(类别)=N(样本)N(类别)
为了防止N(x1|类别) = 0,需要在分子分母添加一个平滑值,得到
P
(
类
别
)
=
N
(
类
别
)
+
α
N
(
样
本
)
+
α
∗
N
(
类
别
种
数
)
P(类别) = \frac{N(类别)+\alpha}{N(样本)+\alpha*N(类别种数)}
P(类别)=N(样本)+α∗N(类别种数)N(类别)+α
P ( x 1 ∣ 类 别 ) = N ( x 1 ∣ 类 别 ) + α N ( 类 别 ) + α ∗ 特 征 值 种 数 P(x1|类别) = \frac{N(x1|类别)+\alpha}{N(类别)+\alpha*特征值种数} P(x1∣类别)=N(类别)+α∗特征值种数N(x1∣类别)+α
那么现在还剩下一个P(特征),这个东西需要求吗?我们先不求它,把它带着,看看之后会发生什么。
在知道了P(类别|特征)后,基于极大似然估计法,我们认为相同特征条件下,哪个类别导致这些特征的概率最大,我们就认为在给定特征下预测到的结果为该类别。
c
l
a
s
s
i
d
=
a
r
g
m
a
x
(
P
(
类
别
∣
特
征
)
)
=
a
r
g
m
a
x
(
P
(
特
征
∣
类
别
)
∗
P
(
类
别
)
P
(
特
征
)
)
classid = argmax(P(类别|特征)) = argmax(\frac{P(特征|类别)*P(类别)}{P(特征)})
classid=argmax(P(类别∣特征))=argmax(P(特征)P(特征∣类别)∗P(类别))
从上式可以看出,每一个带比较的项都除以了同一个值P(特征),显然它并不影响比大小,因此上式简化为
c
l
a
s
s
i
d
=
a
r
g
m
a
x
(
P
(
特
征
∣
类
别
)
∗
P
(
类
别
)
)
classid = argmax(P(特征|类别)*P(类别))
classid=argmax(P(特征∣类别)∗P(类别))
利用该公式即可获得最终的预测结果,并且能知道该结果相应的概率