朴素贝叶斯推导参数推导
1 问题回顾
基于贝叶斯的垃圾邮件分类,主要原理是通过对原始邮件数据的分析得出一种模型。根据邮件中单词的内容符合不同标签的概率积的大小,来判断邮件所属的标签类型。
基于贝叶斯的垃圾邮件分类中,计算是某邮件是正常邮件的概率,所用到的公式如(1-1)所示。
P
(
w
1
,
w
2
,
w
3
,
.
.
.
.
w
n
∣
正
常
)
×
P
(
正
常
)
=
P
(
正
常
)
×
∏
i
=
1
n
P
(
w
i
∣
正
常
)
(1-1)
P(w_1,w_2,w_3,....w_n|正常)×P(正常)=P(正常)×\prod_{i=1}^nP(w_i|正常) \tag{1-1}
P(w1,w2,w3,....wn∣正常)×P(正常)=P(正常)×i=1∏nP(wi∣正常)(1-1)
以上的有两个需要计算,我们默认是这样计算的,如公式(1-2)和公式(1-3)所示。
P
(
正
常
)
=
正
常
邮
件
的
个
数
正
常
邮
件
的
个
数
+
垃
圾
邮
件
的
个
数
(1-2)
P(正常)=\frac{正常邮件的个数}{正常邮件的个数+垃圾邮件的个数} \tag{1-2}
P(正常)=正常邮件的个数+垃圾邮件的个数正常邮件的个数(1-2)
P
(
w
i
∣
正
常
)
=
正
常
邮
件
下
w
单
词
出
现
的
次
数
正
常
邮
件
下
单
词
的
总
数
(1-3)
P(w_i|正常)=\frac{正常邮件下w单词出现的次数}{正常邮件下单词的总数} \tag{1-3}
P(wi∣正常)=正常邮件下单词的总数正常邮件下w单词出现的次数(1-3)
2.开始推导
设有邮件数据集
D
=
{
(
X
i
,
Y
i
)
}
\ D=\{(X_i,Y_i)\}
D={(Xi,Yi)}
其中
X
i
和
Y
i
\ X_i和Y_i
Xi和Yi分别表示邮件以及其标签(正常,垃圾)并用1,0 表示。
此外,每一个
X
可
分
解
为
单
词
集
合
\ X 可分解为单词集合
X可分解为单词集合
w
1
,
w
2
.
.
.
.
.
w
m
i
\ w_1,w_2.....w_{m_i}
w1,w2.....wmi,其中
m
i
\ m_i
mi是该文档的单词个数。
2.1构造目标函数
原式(1-1)可化为如下公式(2-1)。
我们认为每个单词之间是独立存在的(这就是朴素贝叶斯的朴素之处)。根据条件独立公式得:
P
(
D
)
=
∏
i
=
0
n
{
∏
j
=
0
m
i
P
(
w
j
∣
y
i
)
⋅
P
(
y
i
)
}
(2-1)
P(D)= \prod_{i=0}^n~~\{~\prod_{j=0}^{m_i} P(w_j|y_i)\cdot P(y_i)~\} \tag{2-1}
P(D)=i=0∏n { j=0∏miP(wj∣yi)⋅P(yi) }(2-1)
取公式(2-1)部分,作如下转化:
∏
j
=
0
m
i
P
(
w
j
∣
y
i
)
⇒
∏
j
=
0
V
P
(
w
j
∣
y
i
)
n
i
,
j
(2-2)
\prod_{j=0}^{m_i} P(w_j|y_i) \Rightarrow \prod_{j=0}^{V} P(w_j|y_i)^{n_{i,j}} \tag{2-2}
j=0∏miP(wj∣yi)⇒j=0∏VP(wj∣yi)ni,j(2-2)
由于我们改为遍历字典,设字典的长度为V。
n
i
j
\ n_{ij}
nij表示第
X
i
\ X_i
Xi 邮件中,包含
w
j
\ w_j
wj单词的个数。如果单词不存在,
n
i
,
j
=
0
,
则
P
(
w
i
∣
y
i
)
0
=
1
\ n_{i,j} =0 ,则 P(w_i|y_i)^0=1
ni,j=0,则P(wi∣yi)0=1,所以真正有效的值,还是
X
i
\ X_i
Xi 邮件中,包含的单词。所以箭头两边成立。这看似等价的操作,却为以后提供了巨大遍历。具体什么遍历稍后再说,单说回公式(2-1)。
公式(2-1) ,经过公式(2-2) 的变形之后变成如下形式:
P
(
D
)
=
∏
i
=
0
n
{
∏
j
=
0
V
P
(
w
j
∣
y
i
)
n
i
,
j
⋅
P
(
y
i
)
}
(2-3)
P(D)= \prod_{i=0}^n~~\{~\prod_{j=0}^{V} P(w_j|y_i)^{n_{i,j}} \cdot P(y_i)~\} \tag{2-3}
P(D)=i=0∏n { j=0∏VP(wj∣yi)ni,j⋅P(yi) }(2-3)
2.2 化简目标函数
下面求其最大值,由于log函数的单调递增性。取对数后,最大值位置不变。
a
r
g
m
a
x
P
(
D
)
=
a
r
g
m
a
x
log
[
P
(
D
)
]
argmax P(D)= argmax \log [P(D)]
argmaxP(D)=argmaxlog[P(D)]
由log函数性质可得
a
r
g
m
a
x
P
(
D
)
=
a
r
g
m
a
x
∑
i
=
0
n
{
∑
j
=
0
V
n
i
,
j
⋅
log
P
(
w
j
∣
y
i
)
+
log
P
(
y
i
)
}
argmax P(D)=argmax \sum_{i=0}^n~~\{~\sum_{j=0}^{V}~n_{i,j} \cdot \log P(w_j|y_i) + \log P(y_i)~\}
argmaxP(D)=argmaxi=0∑n { j=0∑V ni,j⋅logP(wj∣yi)+logP(yi) }
由于这个是二分类问题,我们可以穷举分类,并用k表示。如k=0 表示垃圾邮件;k=1 表示正常邮件。于是得公式(2-4)
a r g m a x P ( D ) = a r g m a x ∑ k = 0 1 ∑ i = ( y i = k ) { ∑ j = 0 V n i , j ⋅ log P ( w j ∣ y i = k ) + log P ( y i = k ) } (2-4) argmax P(D)=argmax \sum_{k=0}^1 ~~~\sum_{i=(y_i=k)}~~\{~\sum_{j=0}^{V}~n_{i,j} \cdot \log P(w_j|y_i=k) + \log P(y_i=k)~\}\tag{2-4} argmaxP(D)=argmaxk=0∑1 i=(yi=k)∑ { j=0∑V ni,j⋅logP(wj∣yi=k)+logP(yi=k) }(2-4)
令
θ
i
,
k
=
P
(
w
j
∣
y
i
=
k
)
,
k
=
0
,
1
\ \theta_{i,k}= P(w_j|y_i=k) ,k=0,1
θi,k=P(wj∣yi=k),k=0,1
π
k
=
P
(
y
i
=
k
)
,
k
=
0
,
1
\ \pi_k= P(y_i=k),k=0,1
πk=P(yi=k),k=0,1
结合公式(2-4),使用最大似然估计(MLE ),得到目标函数(2-5)。
θ
M
L
E
,
π
M
L
E
=
a
r
g
m
a
x
{
θ
,
π
}
∑
k
=
0
1
∑
i
=
(
y
i
=
k
)
{
∑
j
=
0
V
n
i
,
j
⋅
log
θ
i
,
k
+
log
π
k
}
(2-5)
\theta_{MLE} ,\pi_{MLE}=argmax_{\{\theta,\pi\}}\sum_{k=0}^1 ~~~\sum_{i=(y_i=k)}~~\{~\sum_{j=0}^{V}~n_{i,j} \cdot \log \theta_{i,k}+ \log \pi_k~\}\tag{2-5}
θMLE,πMLE=argmax{θ,π}k=0∑1 i=(yi=k)∑ { j=0∑V ni,j⋅logθi,k+logπk }(2-5)
拆分得公式(2-5)得
θ
M
L
E
,
π
M
L
E
=
a
r
g
m
a
x
{
θ
,
π
}
∑
k
=
0
1
∑
i
=
(
y
i
=
k
)
∑
j
=
0
V
n
i
,
j
⋅
log
θ
i
,
k
+
∑
k
=
0
1
∑
i
=
(
y
i
=
k
)
log
π
k
(2-6)
\theta_{MLE} ,\pi_{MLE}=argmax_{\{\theta,\pi\}} \sum_{k=0}^1 ~~~\sum_{i=(y_i=k)}~~~\sum_{j=0}^{V}~n_{i,j} \cdot \log \theta_{i,k}+ \sum_{k=0}^1 ~~~\sum_{i=(y_i=k)} \log \pi_k~\tag{2-6}
θMLE,πMLE=argmax{θ,π}k=0∑1 i=(yi=k)∑ j=0∑V ni,j⋅logθi,k+k=0∑1 i=(yi=k)∑logπk (2-6)
由于
∑
i
=
(
y
i
=
k
)
\ \sum_{i=(y_i=k)}
∑i=(yi=k)表示所有取K值的邮件,不妨令
n
k
\ {n_k}
nk表示取k的邮件数。
∑
i
=
(
y
i
=
k
)
log
π
k
=
n
k
⋅
log
π
k
\sum_{i=(y_i=k)} \log \pi_k=n_k\cdot \log \pi_k
i=(yi=k)∑logπk=nk⋅logπk
代入公式(2-6)得,我们最终的目标函数,如公式(2-7)所示。
θ
M
L
E
,
π
M
L
E
=
a
r
g
m
a
x
{
θ
,
π
}
∑
k
=
0
1
∑
i
=
(
y
i
=
k
)
∑
j
=
0
V
n
i
,
j
⋅
log
θ
i
,
k
+
∑
k
=
0
1
n
k
⋅
log
π
k
(2-7)
\theta_{MLE} ,\pi_{MLE}=argmax_{\{\theta,\pi\}} \sum_{k=0}^1 ~~~\sum_{i=(y_i=k)}~~~\sum_{j=0}^{V}~n_{i,j} \cdot \log \theta_{i,k}+ \sum_{k=0}^1 n_k\cdot \log \pi_k~\tag{2-7}
θMLE,πMLE=argmax{θ,π}k=0∑1 i=(yi=k)∑ j=0∑V ni,j⋅logθi,k+k=0∑1nk⋅logπk (2-7)
此外,还有两条约束条件
∑
k
=
0
1
π
k
=
1
(s.t.-1)
\ \sum_{k=0}^1 \pi_k=1 \tag{s.t.-1}
k=0∑1πk=1(s.t.-1)
∑
j
=
0
V
θ
j
,
k
=
1
,
k
=
0
,
1
(s.t.-2)
\sum_{j=0}^V \theta_{j,k}=1 ,k=0,1\tag{s.t.-2}
j=0∑Vθj,k=1,k=0,1(s.t.-2)
2.3 拉格朗日乘数法
根据公式(2-7)、(s.t.-1)和(s.t.-1)结合构建拉格朗日函数。
F
(
θ
,
π
,
λ
)
=
∑
k
=
0
1
∑
i
=
(
y
i
=
k
)
∑
j
=
0
V
n
i
,
j
⋅
log
θ
i
,
k
+
∑
k
=
0
1
n
k
⋅
log
π
k
+
λ
⋅
(
∑
k
=
0
1
π
k
−
1
)
+
∑
k
=
0
1
λ
k
⋅
(
∑
j
=
0
V
θ
j
,
k
−
1
)
(2-8)
F(\theta,\pi,\lambda)=\sum_{k=0}^1 ~~\sum_{i=(y_i=k)}~~\sum_{j=0}^{V}~n_{i,j} \cdot \log \theta_{i,k}+ \sum_{k=0}^1 n_k\cdot \log \pi_k+\lambda\cdot ( \sum_{k=0}^1 \pi_k-1 )+\sum_{k=0}^1 \lambda_k\cdot (\sum_{j=0}^V \theta_{j,k}-1) \tag{2-8}
F(θ,π,λ)=k=0∑1 i=(yi=k)∑ j=0∑V ni,j⋅logθi,k+k=0∑1nk⋅logπk+λ⋅(k=0∑1πk−1)+k=0∑1λk⋅(j=0∑Vθj,k−1)(2-8)
2.3.1 对 θ \theta θ 求偏导
对
θ
\theta
θ 求偏导,只要保留和
θ
\ \theta
θ相关的项即可,
∂
F
(
θ
,
π
,
λ
)
∂
θ
=
∂
{
∑
k
=
0
1
∑
i
=
(
y
i
=
k
)
∑
j
=
0
V
n
i
,
j
⋅
log
θ
i
,
k
+
∑
k
=
0
1
λ
k
⋅
(
∑
j
=
0
V
θ
j
,
k
−
1
)
}
∂
θ
\frac{\partial F(\theta,\pi,\lambda)}{\partial \theta} =\frac{\partial \{\sum_{k=0}^1 ~~\sum_{i=(y_i=k)}~~\sum_{j=0}^{V}~n_{i,j} \cdot \log \theta_{i,k}+ \sum_{k=0}^1 \lambda_k\cdot (\sum_{j=0}^V \theta_{j,k}-1) \}}{\partial \theta}
∂θ∂F(θ,π,λ)=∂θ∂{∑k=01 ∑i=(yi=k) ∑j=0V ni,j⋅logθi,k+∑k=01λk⋅(∑j=0Vθj,k−1)}
为了方便计算,我们只考虑单方向,即忽略k和j的取值,仅仅使用k和j表示某个方向。
∂
F
(
θ
,
π
,
λ
)
∂
θ
=
∂
{
∑
i
=
(
y
i
=
k
)
n
i
,
j
⋅
log
θ
i
,
k
+
λ
k
⋅
(
θ
j
,
k
−
1
)
}
∂
θ
\frac{\partial F(\theta,\pi,\lambda)}{\partial \theta} =\frac{\partial \{ ~~\sum_{i=(y_i=k)} n_{i,j} \cdot \log \theta_{i,k}+ \lambda_k\cdot ( \theta_{j,k}-1) \}}{\partial \theta}
∂θ∂F(θ,π,λ)=∂θ∂{ ∑i=(yi=k)ni,j⋅logθi,k+λk⋅(θj,k−1)}
求导得
∂
F
(
θ
,
π
,
λ
)
∂
θ
=
∑
i
=
(
y
i
=
k
)
n
i
,
j
θ
i
,
k
+
λ
k
\frac{\partial F(\theta,\pi,\lambda)}{\partial \theta} =\sum_{i=(y_i=k)} \frac {n_{i,j} } {\theta_{i,k}}+ \lambda_k
∂θ∂F(θ,π,λ)=i=(yi=k)∑θi,kni,j+λk
令导数为零,求得驻点,如公式(2-9)
θ
j
,
k
=
−
1
λ
k
⋅
∑
i
=
(
y
i
=
k
)
n
i
,
j
(2-9)
\theta _{j,k}=-\frac{1}{\lambda_k } \cdot\sum_{i=(y_i=k)} n_{i,j}\tag{2-9}
θj,k=−λk1⋅i=(yi=k)∑ni,j(2-9)
代入(s.t.-2)得
∑
j
=
0
V
θ
j
,
k
=
∑
j
=
0
V
(
−
1
λ
k
⋅
∑
i
=
(
y
i
=
k
)
n
i
,
j
)
=
1
\sum_{j=0}^V \theta_{j,k}=\sum_{j=0}^V (-\frac{1}{\lambda_k } \cdot\sum_{i=(y_i=k)} n_{i,j} )=1
j=0∑Vθj,k=j=0∑V(−λk1⋅i=(yi=k)∑ni,j)=1
从而
λ
k
=
−
∑
j
=
0
V
∑
i
=
(
y
i
=
k
)
n
i
,
j
(2-10)
\lambda_k=-\sum_{j=0}^V \sum_{i=(y_i=k)} n_{i,j}\tag{2-10}
λk=−j=0∑Vi=(yi=k)∑ni,j(2-10)
代入到公式(2-9)得,
θ
j
,
k
=
∑
i
=
(
y
i
=
k
)
n
i
,
j
∑
j
=
0
V
∑
i
=
(
y
i
=
k
)
n
i
,
j
\theta _{j,k}=\frac{\sum_{i=(y_i=k) }n_{i,j} } {\sum_{j=0}^V~~~~~~ \sum_{i=(y_i=k)} n_{i,j}}
θj,k=∑j=0V ∑i=(yi=k)ni,j∑i=(yi=k)ni,j
这也是我们开始所说的
P
(
w
i
∣
正
常
)
=
正
常
邮
件
下
w
单
词
出
现
的
次
数
正
常
邮
件
下
单
词
的
总
数
P(w_i|正常)=\frac{正常邮件下w单词出现的次数}{正常邮件下单词的总数}
P(wi∣正常)=正常邮件下单词的总数正常邮件下w单词出现的次数
2.3.2 对 π \pi π 求偏导
对
π
\pi
π 求偏导,只要保留和
π
\ \pi
π相关的项
∂
F
(
θ
,
π
,
λ
)
∂
π
=
∂
{
∑
k
=
0
1
n
k
⋅
log
π
k
+
λ
⋅
(
∑
k
=
0
1
π
k
−
1
)
}
∂
π
\frac{\partial F(\theta,\pi,\lambda)}{\partial \pi} =\frac{\partial \{\sum_{k=0}^1 n_k\cdot \log \pi_k+\lambda\cdot ( \sum_{k=0}^1 \pi_k-1 ) \}}{\partial \pi}
∂π∂F(θ,π,λ)=∂π∂{∑k=01nk⋅logπk+λ⋅(∑k=01πk−1)}
为了方便计算,我们只考虑单方向,即忽略k和j的取值,仅仅使用k和j表示某个方向。
∂
F
(
θ
,
π
,
λ
)
∂
π
=
∂
{
n
k
⋅
log
π
k
+
λ
⋅
(
π
k
−
1
)
}
∂
π
\frac{\partial F(\theta,\pi,\lambda)}{\partial \pi} =\frac{\partial \{ n_k\cdot \log \pi_k+\lambda\cdot ( \pi_k-1 ) \}}{\partial \pi}
∂π∂F(θ,π,λ)=∂π∂{nk⋅logπk+λ⋅(πk−1)}
求导得
∂
F
(
θ
,
π
,
λ
)
∂
π
=
n
k
π
k
+
λ
\frac{\partial F(\theta,\pi,\lambda)}{\partial \pi} = \frac {n_k } {\pi_k}+ \lambda
∂π∂F(θ,π,λ)=πknk+λ
令导数为零,求得驻点
π
k
=
−
n
k
λ
(2-11)
\pi_{k}=-\frac{ n_k}{\lambda } \tag{2-11}
πk=−λnk(2-11)
代入(s.t.-1)得
∑
k
=
0
1
π
k
=
∑
k
=
0
1
−
n
k
λ
=
1
\sum_{k=0}^1 \pi_k=\sum_{k=0}^1 -\frac{ n_k}{\lambda }=1
k=0∑1πk=k=0∑1−λnk=1
从而
λ
=
−
∑
k
=
0
1
n
k
(2-12)
\lambda =-\sum_{k=0}^1 n_k\tag{2-12}
λ=−k=0∑1nk(2-12)
代入到公式(2-11)得
π
k
=
n
k
∑
k
=
0
1
n
k
\pi_k=\frac{ n_k}{\sum_{k=0}^1 n_k}
πk=∑k=01nknk
这也是我们开始所说的
P ( 正 常 ) = 正 常 邮 件 的 个 数 正 常 邮 件 的 个 数 + 垃 圾 邮 件 的 个 数 P(正常)=\frac{正常邮件的个数}{正常邮件的个数+垃圾邮件的个数} P(正常)=正常邮件的个数+垃圾邮件的个数正常邮件的个数
3.问题总结
- 本次朴素贝叶斯的推导,默认认为邮件中的单词是条件独立的,这也是朴素贝叶斯的朴素之处。
- 使用拉格朗日乘数法求得驻点的 θ \theta θ和 π \pi π的值,而凸函数是必要的前提,否则无法判断该驻点是否为全局最优解。
- 本次计算默认是二分类问题,即k的取值为0,1 。但是,完全可以推广到n分类问题。
- 在对拉格朗日函数求偏导时,可以只考虑一个分类的一个单词,应为对于整体的数据集,他们相当于一个随机样本(未确定)。