1 朴素贝叶斯算法
朴素贝叶斯算法是是基于贝叶斯定理与特征条件独立假设的分类方法。接下来我们就分别从贝叶斯原理和特征条件独立假设介绍贝叶斯算法。
1.1 贝叶斯原理
条件概率
条件概率是指:在事件
y
y
y已经发生的条件下,事件
x
x
x发生的概率。条件概率可表示为
P
(
x
∣
y
)
P(x|y)
P(x∣y),其计算公式为:
P
(
x
∣
y
)
=
P
(
x
,
y
)
P
(
y
)
P(x|y) = \frac{P(x,y)}{P(y)}
P(x∣y)=P(y)P(x,y)
其中
P
(
x
,
y
)
P(x,y)
P(x,y)就是联合概率,表示
x
x
x和
y
y
y两件事情同事发生的概率,而
P
(
y
)
P(y)
P(y)和
P
(
x
)
P(x)
P(x)就是先验概率,是根据以往的经验和分析得到的概率,就是通过训练集得到的统计概率。
全概率
全概率公式是指:如果事件
y
1
,
y
2
,
.
.
.
,
y
n
y_1,y_2,...,y_n
y1,y2,...,yn可构成一个完备事件组,即它们两两互不相容,其和为全集。则对于事件
x
x
x有:
P
(
x
∣
y
)
=
∑
i
=
1
n
P
(
y
i
)
P
(
x
∣
y
i
)
P(x|y)=\sum_{i=1}^{n}P(y_i)P(x|y_i)
P(x∣y)=i=1∑nP(yi)P(x∣yi)
既然有先验概率,那拥有后验概率是最直接的想法。后验概率是指,某事件
x
x
x已经发生,那么该事件是因为事件
y
y
y而发生的概率。后验概率以先验概率为基础,通过贝叶斯公式,用先验概率和似然函数计算出来。这里就引出了贝叶斯定理:
P
(
x
∣
y
)
=
P
(
y
∣
x
)
P
(
x
)
P
(
y
)
P(x|y)=\frac{P(y|x)P(x)}{P(y)}
P(x∣y)=P(y)P(y∣x)P(x)
- P ( x ∣ y ) P(x|y) P(x∣y)是已知 y y y发生后 x x x的条件概率,也被称作 x x x的后验概率,直观理解就是事后的概率;
- P ( x ) P(x) P(x)是 x x x的先验概率,之所以称为"先验"是因为它不考虑任何 y y y方面的因素;
- P ( y ∣ x ) P(y|x) P(y∣x)是已知x发生后y的条件概率,也被称作 y y y的后验概率,即 P ( y ) P(y) P(y)是 y y y的先验概率。
贝叶斯算法正是利用以上信息求解后验概率,并根据后验概率的值来进行分类的。
贝叶斯定理推导
根据条件概率公式,
y
y
y发生条件下
x
x
x的概率为:
P
(
x
∣
y
)
=
P
(
x
,
y
)
P
(
y
)
P(x|y)=\frac{P(x,y)}{P(y)}
P(x∣y)=P(y)P(x,y)
x
x
x发生条件下
y
y
y的概率为:
P
(
y
∣
x
)
=
P
(
y
,
x
)
P
(
x
)
P(y|x)=\frac{P(y,x)}{P(x)}
P(y∣x)=P(x)P(y,x)
合并后得到:
P
(
x
∣
y
)
=
P
(
y
∣
x
)
P
(
x
)
=
P
x
∣
y
P
(
y
)
P(x|y)=P(y|x)P(x)=P{x|y}P(y)
P(x∣y)=P(y∣x)P(x)=Px∣yP(y)
若
p
(
y
)
p(y)
p(y)非零,两边同时除以
p
(
y
)
p(y)
p(y)得到贝叶斯定理:
P
(
x
∣
y
)
=
P
(
y
∣
x
)
P
(
x
)
P
(
y
)
P(x|y)=\frac{P(y|x)P(x)}{P(y)}
P(x∣y)=P(y)P(y∣x)P(x)
1.2 特征条件独立
首先对上述
x
x
x和
y
y
y扩展一下,有一个训练数据集
(
X
,
Y
)
(X,Y)
(X,Y),其中
x
∈
X
x\in X
x∈X,并且包含
n
n
n维特征,即
x
=
(
x
−
1
,
x
2
,
.
.
.
,
x
n
)
x=(x-1,x_2,...,x_n)
x=(x−1,x2,...,xn),
y
∈
Y
y\in Y
y∈Y,共有
k
k
k种类别,即
y
=
(
y
1
,
y
2
,
.
.
.
,
y
k
)
y=(y_1,y_2,...,y_k)
y=(y1,y2,...,yk)。
给定一个新的输入
x
x
x,需要判定它属于哪一个类别,从概率的角度来看,这个问题就是给定
x
x
x,它属于哪个类别的概率是最大的。那么问题就转化为求解
P
(
y
1
∣
x
)
,
P
(
y
2
∣
x
)
,
.
.
.
,
P
(
y
k
∣
x
)
P(y_1|x),P(y_2|x),...,P(y_k|x)
P(y1∣x),P(y2∣x),...,P(yk∣x)中最大的那个,即求后验概率最大的输出:
a
r
g
m
a
x
y
k
P
(
y
k
∣
x
)
argmax_{y_k}P(y_k|x)
argmaxykP(yk∣x)
由贝叶斯定理可求:
P
(
y
k
∣
x
)
=
P
(
x
∣
y
k
)
P
(
y
k
)
P
(
x
)
P(y_k|x) = \frac{P(x|y_k)P(y_k)}{P(x)}
P(yk∣x)=P(x)P(x∣yk)P(yk)
而根据全概率公式,可以求得
P
(
x
)
=
∑
i
=
1
k
P
(
y
i
)
P
(
x
∣
y
i
)
P(x)=\sum_{i=1}^{k}P(y_i)P(x|y_i)
P(x)=i=1∑kP(yi)P(x∣yi)
就有:
P
(
y
k
∣
x
)
=
P
(
x
∣
y
k
)
P
(
y
k
)
∑
i
=
1
k
P
(
y
i
)
P
(
x
∣
y
i
)
P(y_k|x) = \frac{P(x|y_k)P(y_k)}{\sum_{i=1}^{k}P(y_i)P(x|y_i)}
P(yk∣x)=∑i=1kP(yi)P(x∣yi)P(x∣yk)P(yk)
其中
P
(
y
k
)
P(y_k)
P(yk)是可以通过统计训练集即可计算得到,重点是
P
(
x
∣
y
k
)
P(x|y_k)
P(x∣yk)的计算,我们将其分解:
P
(
x
∣
y
k
)
=
P
(
x
1
,
x
2
,
.
.
.
,
x
n
∣
y
k
)
P(x|y_k)=P(x_1,x_2,...,x_n|y_k)
P(x∣yk)=P(x1,x2,...,xn∣yk)
现在假设
x
i
x_i
xi特征的可选值由
s
i
s_i
si个,那么很容易算的其参数个数为
k
∏
i
=
1
n
s
i
k\prod_{i=1}^{n}s_i
k∏i=1nsi,其参数规模是指数级别的。
所以就有了朴素贝叶斯,它非常纯真可爱,它假设这些特征
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2,...,x_n
x1,x2,...,xn之间是相互独立的,那么就有:
P
(
x
∣
y
k
)
=
P
(
x
1
,
x
2
,
.
.
.
,
x
n
∣
y
k
)
=
∏
i
=
1
n
P
(
x
i
∣
y
k
)
P(x|y_k)=P(x_1,x_2,...,x_n|y_k)=\prod_{i=1}^{n}P(x_i|y_k)
P(x∣yk)=P(x1,x2,...,xn∣yk)=i=1∏nP(xi∣yk)
参数个数降低到了
k
∑
i
=
1
n
s
i
k\sum_{i=1}^{n}s_i
k∑i=1nsi。
朴素贝叶斯分类器
结合上一节的结论,很容易计算得到:
P
(
y
k
∣
x
)
=
P
(
x
∣
y
k
)
P
(
y
k
)
∑
i
=
1
k
P
(
y
i
)
P
(
x
∣
y
i
)
=
P
(
y
k
)
∏
i
=
1
n
P
(
x
i
∣
y
k
)
∑
i
=
1
k
P
(
y
i
)
∏
i
=
1
n
P
(
x
i
∣
y
k
)
P(y_k|x) = \frac{P(x|y_k)P(y_k)}{\sum_{i=1}^{k}P(y_i)P(x|y_i)} \\ =\frac{P(y_k)\prod_{i=1}^{n}P(x_i|y_k)}{\sum_{i=1}^{k}P(y_i)\prod_{i=1}^{n}P(x_i|y_k)}
P(yk∣x)=∑i=1kP(yi)P(x∣yi)P(x∣yk)P(yk)=∑i=1kP(yi)∏i=1nP(xi∣yk)P(yk)∏i=1nP(xi∣yk)
则朴素贝叶斯分类器的表达式为:
f
(
x
)
=
a
r
g
m
a
x
y
k
P
(
y
k
∣
x
)
=
a
r
g
m
a
x
y
k
P
(
y
k
)
∏
i
=
1
n
P
(
x
i
∣
y
k
)
∑
i
=
1
k
P
(
y
i
)
∏
i
=
1
n
P
(
x
i
∣
y
k
)
f(x)=argmax_{y_k}P(y_k|x)=argmax_{y_k}\frac{P(y_k)\prod_{i=1}^{n}P(x_i|y_k)}{\sum_{i=1}^{k}P(y_i)\prod_{i=1}^{n}P(x_i|y_k)}
f(x)=argmaxykP(yk∣x)=argmaxyk∑i=1kP(yi)∏i=1nP(xi∣yk)P(yk)∏i=1nP(xi∣yk)
很明显,对于分母
∑
i
=
1
k
P
(
y
i
)
∏
i
=
1
n
P
(
x
i
∣
y
k
)
\sum_{i=1}^{k}P(y_i)\prod_{i=1}^{n}P(x_i|y_k)
∑i=1kP(yi)∏i=1nP(xi∣yk)其值是恒定的,因此朴素贝叶斯分类器的最终表达式为:
f
(
x
)
=
a
r
g
m
a
x
y
k
P
(
y
k
)
∏
i
=
1
n
P
(
x
i
∣
y
k
)
f(x) = argmax_{y_k}P(y_k)\prod_{i=1}^{n}P(x_i|y_k)
f(x)=argmaxykP(yk)i=1∏nP(xi∣yk)
接下来就只需要计算好
P
(
y
k
)
P(y_k)
P(yk)和
P
(
x
i
∣
y
k
)
P(x_i|y_k)
P(xi∣yk)即可。
2 概率计算模型
上一节末尾我们已经推导出朴素贝叶斯分类器的基本公式,只需要再计算先验概率 P ( y k ) P(y_k) P(yk)和条件概率 P ( x i ∣ y k ) P(x_i|y_k) P(xi∣yk)即可。而在实际的应用中,不同的场景应用不同的计算模型。一般有三种模型:
- 多项式模型
适用于特征取值为离散型的场景,特征取值可选个数大于等于2; - 高斯模型
适用于特征取值为连续型的场景; - 伯努利模型
适用于特征取值为离散型的场景,并且可选值必须为0或者1。
2.1 多项式模型
多项式模型适用于特征值取值为离散值,并且较多的场景,如风险等级为取值为高中低等特征。它在计算先验概率和条件概率时会加一个平滑处理,其具体计算方法为:
P
(
y
k
)
=
N
y
k
+
α
N
+
k
α
P(y_k)=\frac{N_{y_k}+\alpha}{N+k\alpha}
P(yk)=N+kαNyk+α
P
(
x
i
∣
y
k
)
=
N
(
y
k
,
x
i
)
+
α
N
y
k
+
n
α
P(x_i|y_k)=\frac{N_{(y_k,x_i)}+\alpha}{N_{y_k} + n\alpha}
P(xi∣yk)=Nyk+nαN(yk,xi)+α
其中
N
y
k
N_{y_k}
Nyk是类别为
y
k
y_k
yk的样本个数,
n
n
n是特征的维数,
N
(
y
k
,
x
i
)
N_{(y_k,x_i)}
N(yk,xi)是类别为
y
k
y_k
yk的样本中,第
i
i
i维特征的值是
x
i
x_i
xi的样本个数,
α
\alpha
α是平滑参数。
为什么需要平滑?在有些应用中,如文本分类任务中,可能存在有些词语压根儿就没出现过,那么就可能导致
N
(
y
k
,
x
i
)
N_{(y_k,x_i)}
N(yk,xi)为零,这就会导致
P
(
x
i
∣
y
k
)
P(x_i|y_k)
P(xi∣yk)为0,这显然不大合理,总不能因某个因素观察到老天爷没下雨,就说老天爷永远不下雨吧。
在实际的应用过程中可以使用sklearn.naive_bayes.MultinomialNB函数实现,传入合适参数 α \alpha α即可完成分类器的训练。
2.2 高斯模型
高斯模型其特征取值为连续型,如身高、距离等。
- 高斯分布
高斯分布又称正态分布,在实际应用中最为广泛。对于单变量 x ∈ ( − ∞ , + ∞ ) x \in(−\infty,+\infty) x∈(−∞,+∞),高斯分布的参数有两个,分别是均值 μ ∈ ( − ∞ , + ∞ ) \mu \in (−\infty,+\infty) μ∈(−∞,+∞)和方差 σ 2 > 0 \sigma^2>0 σ2>0,其概率密度函数为:
N ( x ∣ μ , σ 2 ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 N(x|\mu,\sigma^2)=\frac{1}{\sqrt{2\pi\sigma}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} N(x∣μ,σ2)=2πσ1e−2σ2(x−μ)2 - 多元高斯分布
N ( x ∣ μ , ∑ ) = 1 ( 2 π ) D ∣ ∑ ∣ 1 2 e − 1 2 ( x − μ ) T ∑ − 1 ( x − μ ) N(x|\mu,\sum)=\frac{1}{\sqrt{(2\pi)^D|\sum|^{\frac{1}{2}}}}e^{-\frac{1}{2}(x-\mu)^T\sum^{-1}(x-\mu)} N(x∣μ,∑)=(2π)D∣∑∣211e−21(x−μ)T∑−1(x−μ)
其中 μ \mu μ是 D D D维均值向量, ∑ \sum ∑是 D × D D\times D D×D的协方差矩阵, ∣ ∑ ∣ |\sum| ∣∑∣是 ∑ \sum ∑的行列式,多元高斯分布的期望是 μ \mu μ,方差是 ∑ \sum ∑。 - 概率计算
高斯朴素贝叶斯模型是假设条件概率 P ( X = x ∣ Y k ) P(X=x|Y_k) P(X=x∣Yk)是多元高斯分布,另一方面,由之前的特征的条件独立性假设,我们就可以通过对每个特征的条件概率建模,每个特征的条件概率 N ( μ t , σ t 2 ) N(\mu_t,\sigma_t^2) N(μt,σt2)也服从高斯分布。
在 y k y_k yk类下第 i i i个特征的高斯分布为:
g ( x i ; μ ( x i , y k ) , σ ( x i , y k ) ) = 1 σ ( x i , y k ) 2 π e − ( x i − μ ( x i , y k ) ) 2 2 σ ( x i , y k ) 2 g(x_i;\mu_{(x_i,y_k)},\sigma_{(x_i,y_k)})=\frac{1}{\sigma_{(x_i,y_k)}\sqrt{2\pi}}e^{-\frac{(x_i-\mu_{(x_i,y_k)})^2}{2\sigma_{(x_i,y_k)}^{2}}} g(xi;μ(xi,yk),σ(xi,yk))=σ(xi,yk)2π1e−2σ(xi,yk)2(xi−μ(xi,yk))2
其中, μ ( x i , y k ) \mu_{(x_i,y_k)} μ(xi,yk), σ ( x i , y k ) 2 \sigma_{(x_i,y_k)}^{2} σ(xi,yk)2表示 y k y_k yk类下第 i i i个特征的均值和方差。
由于特征之间的独立性,很容易得到:
P ( X = x ∣ Y = y k ) = ∏ i = 1 n g ( x i ; μ ( x i , y k ) , σ ( x i , y k ) ) P(X=x|Y=y_k)=\prod_{i=1}^{n}g(x_i;\mu_{(x_i,y_k)},\sigma_{(x_i,y_k)}) P(X=x∣Y=yk)=i=1∏ng(xi;μ(xi,yk),σ(xi,yk))
接着就是对参数进行估计,计算得到 μ ( x i , y k ) \mu_{(x_i,y_k)} μ(xi,yk)和 σ ( x i , y k ) \sigma_{(x_i,y_k)} σ(xi,yk)。 - 参数估计
先验概率 P ( y k ) P(y_k) P(yk)还是进行统计计算即可。而均值和方差需要通过极大似然估计来计算。其中:
- 均值的估计 μ ( x i , y k ) \mu_{(x_i,y_k)} μ(xi,yk)是在样本类别 y k y_k yk中,所有 x i x_i xi的平均值;
- 方差的估计
σ
(
x
i
,
y
k
)
\sigma_{(x_i,y_k)}
σ(xi,yk)为样本类别
y
k
y_k
yk中所有
x
i
x_i
xi的方差。
对于一个连续的样本值,带入高斯分布,就可以求出它的概率分布了。得出分布后很轻松的可以计算得到分类器的表达式。
在实际的应用中可以使用sklearn.naive_bayes.GaussianNB,即可完成分类器的训练。
2.3 伯努利模型
与多项式模型一样,伯努利模型适用于离散特征的情况,但不同的是,伯努利模型中每个特征的取值只能是1和0(以文本分类为例,某个单词在文档中出现过,则其特征值为1,否则为0)。
伯努利模型中,条件概率
P
(
x
i
∣
y
k
)
P(x_i|y_k)
P(xi∣yk)的计算方式是:
当特征值
x
i
x_i
xi为1时,
P
(
x
i
∣
y
k
)
=
P
(
x
i
=
1
∣
y
k
)
P(x_i|y_k)=P(x_i=1|y_k)
P(xi∣yk)=P(xi=1∣yk);
当特征值
x
i
x_i
xi为0时,
P
(
x
i
∣
y
k
)
=
1
−
P
(
x
i
=
1
∣
y
k
)
P(x_i|y_k)=1−P(x_i=1|y_k)
P(xi∣yk)=1−P(xi=1∣yk)。
在实际的应用中可以使用sklearn.naive_bayes.BernoulliNB,即可完成分类器的训练。
感谢阅读。
如果觉得文章对你有所帮助,欢迎打赏哦~