生成学习算法
目前我们讨论的算法都是在给定
x
x
x的情况下求解
y
y
y的分布情况,即
p
(
y
∣
x
;
θ
)
p(y|x;\theta)
p(y∣x;θ),例如逻辑回归算法,接下来我们会讨论一种不同类型的算法。
我们首先讨论二分类问题,对于给定的数据集,逻辑回归算法或感知器算法会寻找一条直线来对这些数据进行划分。而对于另一种算法,我们会先针对
y
=
0
y=0
y=0的类别进行建模,然后再针对
y
=
1
y=1
y=1进行建模,最后对于一个新的数据我们会将其与两个模型进行匹配,查看其特征更接近哪个模型。
直接计算
p
(
y
∣
x
)
p(y|x)
p(y∣x)或直接从输入空间映射到标签数据的算法称为判别算法;而学习
p
(
x
∣
y
)
p(x|y)
p(x∣y)和
p
(
y
)
p(y)
p(y)的算法称为生成算法。对于生成算法,我们会针对
y
=
1
y=1
y=1时数据特征的分布和
y
=
0
y=0
y=0时数据特征的分布来建模,在获取
p
(
x
∣
y
=
0
)
,
p
(
x
∣
y
=
1
)
和
p
(
y
)
p(x|y=0),p(x|y=1)和p(y)
p(x∣y=0),p(x∣y=1)和p(y)后,我们根据贝叶斯公式来求解给定
x
x
x下的
y
y
y的分布。
p
(
y
∣
x
)
=
p
(
x
∣
y
)
p
(
y
)
p
(
x
)
p(y|x)=\frac{p(x|y)p(y)}{p(x)}
p(y∣x)=p(x)p(x∣y)p(y)
在该公式中,
p
(
x
)
=
p
(
x
∣
y
=
0
)
p
(
y
=
0
)
+
p
(
x
∣
y
=
1
)
p
(
y
=
1
)
p(x)=p(x|y=0)p(y=0)+p(x|y=1)p(y=1)
p(x)=p(x∣y=0)p(y=0)+p(x∣y=1)p(y=1),因此我们只需要建模
p
(
x
∣
y
)
,
p
(
y
)
p(x|y),p(y)
p(x∣y),p(y)即可,当我们计算
p
(
y
∣
x
)
p(y|x)
p(y∣x)只是为了进行预测时,我们可以不计算上式中的分母
arg
min
y
p
(
y
∣
x
)
=
arg
min
y
p
(
x
∣
y
)
p
(
y
)
p
(
x
)
=
arg
min
y
p
(
x
∣
y
)
p
(
y
)
\arg\min_y\,p(y|x)=\arg\min_y\,\frac{p(x|y)p(y)}{p(x)}=\arg\min_y\,p(x|y)p(y)
argyminp(y∣x)=argyminp(x)p(x∣y)p(y)=argyminp(x∣y)p(y)
1 高斯判别分析
我们首先来讨论的生成算法是高斯判别分析算法(GDA),在这个算法中,我们假设 p ( x ∣ y ) p(x|y) p(x∣y)满足高斯多元分布,我们首先介绍高斯多元分布具体情况。
1.1 多元高斯分布
高斯多元分布中的变量属于多维的,我们假设其是分布在
n
n
n维空间中,因此该多元高斯分布可以使用一个均值向量
μ
∈
R
n
\mu\in\mathbb{R}^n
μ∈Rn和一个协方差矩阵
Σ
∈
R
n
×
n
Σ\in\mathbb{R}^{n\times n}
Σ∈Rn×n来进行参数化,其概率密度函数为:
p
(
x
;
μ
,
∑
)
=
1
(
2
π
)
n
/
2
∣
Σ
∣
1
/
2
e
x
p
(
−
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
)
p(x;\mu,\sum)=\frac{1}{(2\pi)^{n/2}|Σ|^{1/2}}exp(-\frac{1}{2}(x-\mu)^TΣ^{-1}(x-\mu))
p(x;μ,∑)=(2π)n/2∣Σ∣1/21exp(−21(x−μ)TΣ−1(x−μ))
其中的
∣
Σ
∣
|Σ|
∣Σ∣代表该矩阵的行列式。
1.2 高斯判别分析模型
当输入特征
x
x
x是连续值随机变量的分类问题时,我们可以使用高斯判别模型,其中的模型我们定义为
y
∼
B
e
r
n
o
u
l
l
i
(
ϕ
)
x
∣
y
=
0
∼
N
(
μ
0
,
Σ
)
x
∣
y
=
1
∼
N
(
μ
1
,
Σ
)
\begin{aligned} y&\sim Bernoulli(\phi)\\ x|y=0 &\sim \mathcal{N}(\mu_0,Σ)\\ x|y=1 &\sim \mathcal{N}(\mu_1,Σ) \end{aligned}
yx∣y=0x∣y=1∼Bernoulli(ϕ)∼N(μ0,Σ)∼N(μ1,Σ)
将其具体的分布写下来可以得到:
p
(
y
)
=
ϕ
y
(
1
−
ϕ
)
1
−
y
p
(
x
∣
y
=
0
)
=
1
(
2
π
)
n
/
2
∣
Σ
∣
1
/
2
e
x
p
(
−
1
2
(
x
−
μ
0
)
T
Σ
−
1
(
x
−
μ
0
)
)
p
(
x
∣
y
=
1
)
=
1
(
2
π
)
n
/
2
∣
Σ
∣
1
/
2
e
x
p
(
−
1
2
(
x
−
μ
1
)
T
Σ
−
1
(
x
−
μ
1
)
)
\begin{aligned} p(y)&= \phi^y(1-\phi)^{1-y}\\ p(x|y=0) &= \frac{1}{(2\pi)^{n/2}|Σ|^{1/2}}exp(-\frac{1}{2}(x-\mu_0)^TΣ^{-1}(x-\mu_0))\\ p(x|y=1) &= \frac{1}{(2\pi)^{n/2}|Σ|^{1/2}}exp(-\frac{1}{2}(x-\mu_1)^TΣ^{-1}(x-\mu_1)) \end{aligned}
p(y)p(x∣y=0)p(x∣y=1)=ϕy(1−ϕ)1−y=(2π)n/2∣Σ∣1/21exp(−21(x−μ0)TΣ−1(x−μ0))=(2π)n/2∣Σ∣1/21exp(−21(x−μ1)TΣ−1(x−μ1))
在这个模型中我们需要进行求解的参数包括:
ϕ
,
μ
0
,
μ
1
,
Σ
\phi,\mu_0,\mu_1,Σ
ϕ,μ0,μ1,Σ(虽然模型中包含两个均值向量,但我们只假设一个协方差矩阵)
与之前一样使用似然函数来进行模型参数求解,但之前的似然函数为估
P
(
y
∣
x
;
θ
)
P(y|x;\theta)
P(y∣x;θ),而在生成算法中则是联合变量
P
(
x
,
y
;
ϕ
,
μ
0
,
μ
1
,
Σ
)
P(x,y;\phi,\mu_0,\mu_1,Σ)
P(x,y;ϕ,μ0,μ1,Σ)。
l
(
ϕ
,
μ
0
,
μ
1
,
Σ
)
=
l
o
g
∏
i
=
1
m
p
(
x
(
i
)
,
y
(
i
)
;
ϕ
,
μ
0
,
μ
1
,
Σ
)
=
l
o
g
∏
i
=
1
m
p
(
x
(
i
)
∣
y
(
i
)
;
μ
0
,
μ
1
,
Σ
)
p
(
y
(
i
)
;
ϕ
)
\begin{aligned} l(\phi,\mu_0,\mu_1,Σ) &= log \, \prod_{i=1}^mp(x^{(i)},y^{(i)};\phi,\mu_0,\mu_1,Σ)\\ &=log \, \prod_{i=1}^mp(x^{(i)}|y^{(i)};\mu_0,\mu_1,Σ)p(y^{(i)};\phi) \end{aligned}
l(ϕ,μ0,μ1,Σ)=logi=1∏mp(x(i),y(i);ϕ,μ0,μ1,Σ)=logi=1∏mp(x(i)∣y(i);μ0,μ1,Σ)p(y(i);ϕ)
通过对上述式子进行最大化求解,我们可以得到
ϕ
=
1
m
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
μ
0
=
∑
i
=
1
m
1
{
y
(
i
)
=
0
}
x
(
i
)
∑
i
=
1
m
1
{
y
(
i
)
=
0
}
μ
1
=
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
x
(
i
)
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
Σ
=
1
m
∑
i
=
1
m
(
x
(
i
)
−
μ
y
(
i
)
)
(
x
(
i
)
−
μ
y
(
i
)
)
T
\begin{aligned} \phi&=\frac{1}{m}\sum_{i=1}^m1\{y^{(i)}=1\}\\ \mu_0&=\frac{\sum_{i=1}^m1\{y^{(i)}=0\}x^{(i)}}{\sum_{i=1}^m1\{y^{(i)}=0\}}\\ \mu_1&=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}x^{(i)}}{\sum_{i=1}^m1\{y^{(i)}=1\}}\\ Σ&=\frac{1}{m}\sum_{i=1}^m(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T \end{aligned}
ϕμ0μ1Σ=m1i=1∑m1{y(i)=1}=∑i=1m1{y(i)=0}∑i=1m1{y(i)=0}x(i)=∑i=1m1{y(i)=1}∑i=1m1{y(i)=1}x(i)=m1i=1∑m(x(i)−μy(i))(x(i)−μy(i))T
1.3 讨论:GDA与逻辑回归
GDA模型与逻辑回归模型之间存在着一定的关系,如果我们将
p
(
y
=
1
∣
x
;
ϕ
,
μ
0
,
μ
1
,
Σ
)
p(y=1|x;\phi,\mu_0,\mu_1,Σ)
p(y=1∣x;ϕ,μ0,μ1,Σ)定义为关于
x
x
x的函数,则我们可以看到该格式会被表示为
p
(
y
=
1
∣
x
;
ϕ
,
μ
0
,
μ
1
,
Σ
)
=
1
1
+
e
x
p
(
−
θ
T
x
)
p(y=1|x;\phi,\mu_0,\mu_1,Σ)=\frac{1}{1+exp(-\theta^Tx)}
p(y=1∣x;ϕ,μ0,μ1,Σ)=1+exp(−θTx)1
其中的
θ
\theta
θ可以用
ϕ
,
μ
0
,
μ
1
,
Σ
\phi,\mu_0,\mu_1,Σ
ϕ,μ0,μ1,Σ进行表示,这个格式就是逻辑回归的格式。
一般来说,在同一数据集上进行训练时,GDA和逻辑回归会给出不同的决策边界,下面我们将说明如何选择模型。
如果
p
(
x
∣
y
)
p(x|y)
p(x∣y)为高斯分布,我们可以从GDA模型反推到逻辑回归模型,然而却无法从逻辑回归模型反推到
p
(
x
∣
y
)
p(x|y)
p(x∣y)为高斯分布,因为在GDA模型中我们进行了更强的假设。因此当我们在GDA中做的模型假设是正确的时,GDA可以得到更好的训练效果。因此在数据集比较小的情况下,我们会通过对训练模型进行更多的假设使其获得更好的训练效果,在这种情况下我们会使用GDA模型。相反,由于逻辑回归做的假设比较少,因此逻辑回归算法有更强的鲁棒性,关于
p
(
x
∣
y
)
p(x|y)
p(x∣y)存在着多种可能的分布,比如高斯分布,泊松分布等,这些分布都可以反推到逻辑回归中,因此逻辑回归在这些不同的分布可以获得很好的训练效果,但GDA算法当做的假设错误时训练效果较差。
总结:GDA做了更强的建模假设,并且数据效率更高,例如当建模假设是正确的或至少近似正确的时候,就需要较少的训练数据来学习。逻辑回归做出了更弱的假设,并且对模型假设的偏差具有更强的鲁棒性。
2 朴素贝叶斯
在GDA中的输入数据
x
x
x是连续值,接下来考虑的朴素贝叶斯中的输入数据是离散值,我们使用朴素贝叶斯来进行邮件分类(是否为垃圾邮件)。
我们使用特征向量来表示邮件,首先建立一个词典向量,如果邮件中包含第
i
i
i个词,则将该位置的元素值置为1,否则为0,因此输入数据
x
x
x的维度等于词典的单词数量。
如果我们设置的词典中有5000个单词,则输入的数据
x
∈
R
5000
x\in\mathbb{R}^{5000}
x∈R5000,我们需要建立的模型是
p
(
x
∣
y
)
p(x|y)
p(x∣y),如果我们用多项式分布来建模,则会有
2
5000
2^{5000}
25000个输出结果,这样参数太多了。
为了减少参数量,我们进行了一个很强的假设,在给定
y
y
y的情况下,特征向量中的每个元素都是独立的,这个假设称为朴素贝叶斯假设,因此可以得到:
p
(
x
1
,
x
2
,
.
.
.
,
x
5000
∣
y
)
=
p
(
x
1
∣
y
)
p
(
x
2
∣
y
,
x
1
)
.
.
.
p
(
x
5000
∣
y
,
x
1
,
x
2
,
.
.
.
)
=
p
(
x
1
∣
y
)
p
(
x
2
∣
y
)
.
.
.
p
(
x
5000
∣
y
)
=
∏
i
=
1
5000
p
(
x
i
∣
y
)
\begin{aligned} p(x_1,x_2,...,x_{5000}|y)&=p(x_1|y)p(x_2|y,x_1)...p(x_{5000}|y,x_1,x_2,...)\\ &=p(x_1|y)p(x_2|y)...p(x_{5000}|y)\\ &=\prod_{i=1}^{5000}p(x_i|y) \end{aligned}
p(x1,x2,...,x5000∣y)=p(x1∣y)p(x2∣y,x1)...p(x5000∣y,x1,x2,...)=p(x1∣y)p(x2∣y)...p(x5000∣y)=i=1∏5000p(xi∣y)
虽然朴素贝叶斯假设是一个很强的假设,但该算法仍能实现较好的效果,此时我们需要拟合的参数包括:
ϕ
i
∣
y
=
1
=
p
(
x
i
=
1
∣
y
=
1
)
,
ϕ
i
∣
y
=
0
=
p
(
x
i
=
1
∣
y
=
0
)
,
ϕ
y
=
p
(
y
=
1
)
\phi_{i|y=1}=p(x_i=1|y=1),\phi_{i|y=0}=p(x_i=1|y=0),\phi_y=p(y=1)
ϕi∣y=1=p(xi=1∣y=1),ϕi∣y=0=p(xi=1∣y=0),ϕy=p(y=1)。与之前一样,给定
m
m
m个数据样本
{
(
x
(
i
)
,
y
(
i
)
;
i
=
1
,
2
,
.
.
.
,
m
}
\{(x^{(i)},y^{(i)};i=1,2,...,m\}
{(x(i),y(i);i=1,2,...,m},我们可以得到联合似然函数
L
(
ϕ
y
,
ϕ
i
∣
y
=
1
,
ϕ
i
∣
y
=
0
)
=
∏
i
=
1
m
p
(
x
(
i
)
,
y
(
i
)
)
L(\phi_y,\phi_{i|y=1},\phi_{i|y=0})=\prod_{i=1}^mp(x^{(i)},y^{(i)})
L(ϕy,ϕi∣y=1,ϕi∣y=0)=i=1∏mp(x(i),y(i))
通过最大化似然函数我们可以得到:
ϕ
j
∣
y
=
1
=
∑
i
=
1
m
1
{
x
j
(
i
)
=
1
⋀
y
(
i
)
=
1
}
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
ϕ
j
∣
y
=
0
=
∑
i
=
1
m
1
{
x
j
(
i
)
=
1
⋀
y
(
i
)
=
0
}
∑
i
=
1
m
1
{
y
(
i
)
=
0
}
ϕ
y
=
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
m
\begin{aligned} \phi_{j|y=1}&=\frac{\sum_{i=1}^m1\{x^{(i)}_j=1 \bigwedge y^{(i)}=1\}}{\sum_{i=1}^m1\{y^{(i)}=1\}}\\ \phi_{j|y=0}&=\frac{\sum_{i=1}^m1\{x^{(i)}_j=1 \bigwedge y^{(i)}=0\}}{\sum_{i=1}^m1\{y^{(i)}=0\}}\\ \phi_y&=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}}{m} \end{aligned}
ϕj∣y=1ϕj∣y=0ϕy=∑i=1m1{y(i)=1}∑i=1m1{xj(i)=1⋀y(i)=1}=∑i=1m1{y(i)=0}∑i=1m1{xj(i)=1⋀y(i)=0}=m∑i=1m1{y(i)=1}
当计算得到模型参数后,预测过程如下所述
p
(
y
=
1
∣
x
)
=
p
(
x
∣
y
=
1
)
p
(
y
=
1
)
p
(
x
)
=
(
∏
i
=
1
m
p
(
x
i
∣
y
=
1
)
)
p
(
y
=
1
)
(
∏
i
=
1
m
p
(
x
i
∣
y
=
1
)
)
p
(
y
=
1
)
+
(
∏
i
=
1
m
p
(
x
i
∣
y
=
0
)
)
p
(
y
=
0
)
\begin{aligned} p(y=1|x)&=\frac{p(x|y=1)p(y=1)}{p(x)}\\ &=\frac{(\prod_{i=1}^mp(x_i|y=1))p(y=1)}{(\prod_{i=1}^mp(x_i|y=1))p(y=1)+(\prod_{i=1}^mp(x_i|y=0))p(y=0)} \end{aligned}
p(y=1∣x)=p(x)p(x∣y=1)p(y=1)=(∏i=1mp(xi∣y=1))p(y=1)+(∏i=1mp(xi∣y=0))p(y=0)(∏i=1mp(xi∣y=1))p(y=1)
并将计算得到概率最大的一类作为预测结果。
最后,我们考虑输入的特征向量
x
x
x中的值可能不是二值化,而是存在多个值,即
x
i
∈
{
1
,
2
,
.
.
.
,
k
i
}
x_i\in \{1,2,...,k_i\}
xi∈{1,2,...,ki},我们可以直接将
p
(
x
i
∣
y
)
p(x_i|y)
p(xi∣y)建模为多项式分布而不是伯努利分布。
2.1 Laplace平滑
当我们使用朴素贝叶斯来进行垃圾邮件筛选的时候,如果我们的邮件中接收到一个单词之前没有遇到过,如果该单词出现在我们的词典中的第3500个位置,则
ϕ
3500
∣
y
=
1
=
∑
i
=
1
m
1
{
x
3500
(
i
)
=
1
⋀
y
(
i
)
=
1
}
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
=
0
ϕ
3500
∣
y
=
0
=
∑
i
=
1
m
1
{
x
3500
(
i
)
=
1
⋀
y
(
i
)
=
0
}
∑
i
=
1
m
1
{
y
(
i
)
=
0
}
=
0
\phi_{3500|y=1}=\frac{\sum_{i=1}^m1\{x^{(i)}_{3500}=1\bigwedge y^{(i)}=1\}}{\sum_{i=1}^m1\{y^{(i)}=1\}}=0\\ \phi_{3500|y=0}=\frac{\sum_{i=1}^m1\{x^{(i)}_{3500}=1\bigwedge y^{(i)}=0\}}{\sum_{i=1}^m1\{y^{(i)}=0\}}=0
ϕ3500∣y=1=∑i=1m1{y(i)=1}∑i=1m1{x3500(i)=1⋀y(i)=1}=0ϕ3500∣y=0=∑i=1m1{y(i)=0}∑i=1m1{x3500(i)=1⋀y(i)=0}=0
因此
p
(
y
=
1
∣
x
)
=
p
(
x
∣
y
=
1
)
p
(
y
=
1
)
p
(
x
∣
y
=
1
)
p
(
y
=
1
)
+
p
(
x
∣
y
=
0
)
p
(
y
=
0
)
=
∏
i
=
1
n
p
(
x
i
∣
y
=
1
)
p
(
y
=
1
)
∏
i
=
1
n
p
(
x
i
∣
y
=
1
)
p
(
y
=
1
)
+
∏
i
=
1
n
p
(
x
∣
y
=
0
)
p
(
y
=
0
)
=
0
0
\begin{aligned} p(y=1|x)&=\frac{p(x|y=1)p(y=1)}{p(x|y=1)p(y=1)+p(x|y=0)p(y=0)}\\ &=\frac{\prod_{i=1}^np(x_i|y=1)p(y=1)}{\prod_{i=1}^np(x_i|y=1)p(y=1)+\prod_{i=1}^np(x|y=0)p(y=0)}\\ &=\frac{0}{0} \end{aligned}
p(y=1∣x)=p(x∣y=1)p(y=1)+p(x∣y=0)p(y=0)p(x∣y=1)p(y=1)=∏i=1np(xi∣y=1)p(y=1)+∏i=1np(x∣y=0)p(y=0)∏i=1np(xi∣y=1)p(y=1)=00
因为之前没有遇见过所以就将其概率设置为0这样的处理对于模型性能会有一定的影响,为了避免这种情况,我们可以使用Laplace平滑进行处理,下面举例说明Laplace平滑具体处理。
假设某个随机变量的
z
∈
{
1
,
2
,
.
.
.
,
k
}
z\in\{1,2,...,k\}
z∈{1,2,...,k},则
ϕ
i
=
p
(
z
=
i
)
=
∑
j
=
1
m
1
{
z
(
j
)
=
i
}
m
\phi_i=p(z=i)=\frac{\sum_{j=1}^m1\{z^{(j)}=i\}}{m}
ϕi=p(z=i)=m∑j=1m1{z(j)=i}经过平滑处理后可以修改为
ϕ
i
=
p
(
z
=
i
)
=
∑
j
=
1
m
1
{
z
(
j
)
=
i
}
+
1
m
+
k
\phi_i=p(z=i)=\frac{\sum_{j=1}^m1\{z^{(j)}=i\}+1}{m+k}
ϕi=p(z=i)=m+k∑j=1m1{z(j)=i}+1
通过结合Laplace平滑后,朴素贝叶斯分类器的公式修改为
ϕ
j
∣
y
=
1
=
∑
i
=
1
m
1
{
x
j
(
i
)
=
1
⋀
y
i
=
1
}
+
1
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
+
2
ϕ
j
∣
y
=
0
=
∑
i
=
1
m
1
{
x
j
(
i
)
=
1
⋀
y
i
=
0
}
+
1
∑
i
=
1
m
1
{
y
(
i
)
=
0
}
+
2
\phi_{j|y=1}=\frac{\sum_{i=1}^m1\{x^{(i)}_j=1\bigwedge y^{i}=1\}+1}{\sum_{i=1}^m1\{y^{(i)}=1\}+2}\\ \phi_{j|y=0}=\frac{\sum_{i=1}^m1\{x^{(i)}_j=1\bigwedge y^{i}=0\}+1}{\sum_{i=1}^m1\{y^{(i)}=0\}+2}
ϕj∣y=1=∑i=1m1{y(i)=1}+2∑i=1m1{xj(i)=1⋀yi=1}+1ϕj∣y=0=∑i=1m1{y(i)=0}+2∑i=1m1{xj(i)=1⋀yi=0}+1
2.2 用于文本分类的事件模型
在文本分类的特定背景下,朴素贝叶斯可以使用多变量伯努利事件模型。对于多元事件模型,我们采用一种新的特征向量表示方法来表示每个邮件,特征向量
x
x
x中的元素
x
i
∈
{
1
,
2
,
.
.
.
,
∣
V
∣
}
x_i\in\{1,2,...,|V|\}
xi∈{1,2,...,∣V∣},其中的|
V
V
V|代表我们定义的词典的长度,有着
n
n
n个单词的邮件可以表示为一个向量(
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2,...,x_n
x1,x2,...,xn),每个邮件的
n
n
n都可能是不一样的,而
x
i
=
3500
x_i=3500
xi=3500表示邮件中的第
i
i
i个单词出现在词典中第3500个位置上。对于多元事件模型的预测,我们同样是计算
p
(
y
)
p(y)
p(y)和
∏
i
=
1
n
p
(
x
n
∣
y
)
\prod_{i=1}^np(x_n|y)
∏i=1np(xn∣y)来进行预测,但此时的
x
i
∣
y
x_i|y
xi∣y代表的是多项式分布,而不是之前的伯努利分布。
对于这个新模型,我们同样定义参数
ϕ
y
=
p
(
y
=
1
)
,
ϕ
i
∣
y
=
1
=
p
(
x
j
=
i
∣
y
=
1
)
,
ϕ
i
∣
y
=
0
=
p
(
x
j
=
i
∣
y
=
0
)
\phi_y=p(y=1),\phi_{i|y=1}=p(x_j=i|y=1),\phi_{i|y=0}=p(x_j=i|y=0)
ϕy=p(y=1),ϕi∣y=1=p(xj=i∣y=1),ϕi∣y=0=p(xj=i∣y=0).
如果我们给定数据集
{
(
x
(
i
)
,
y
(
i
)
)
,
i
=
1
,
2
,
.
.
.
,
m
}
\{(x^{(i)},y^{(i)}),i=1,2,...,m\}
{(x(i),y(i)),i=1,2,...,m},并且
x
(
i
)
=
(
x
1
(
i
)
,
x
2
(
i
)
,
.
.
.
,
x
n
i
(
i
)
)
x^{(i)}=(x^{(i)}_1,x^{(i)}_2,...,x^{(i)}_{n_i})
x(i)=(x1(i),x2(i),...,xni(i)),其中的
n
i
n_i
ni代表该邮件的长度。其似然函数为
L
(
ϕ
,
ϕ
i
∣
y
=
1
,
ϕ
i
∣
y
=
0
)
=
∏
i
=
1
m
p
(
x
(
i
)
,
y
(
i
)
)
=
∏
i
=
1
m
∏
j
=
1
n
i
p
(
x
(
i
)
∣
y
(
i
)
)
p
(
y
(
i
)
)
=
∏
i
=
1
m
(
∏
j
=
1
n
i
p
(
x
(
i
)
∣
y
(
i
)
;
ϕ
i
∣
y
=
1
,
ϕ
i
∣
y
=
0
)
p
(
y
(
i
)
;
ϕ
)
\begin{aligned} L(\phi,\phi_{i|y=1},\phi_{i|y=0})&=\prod_{i=1}^mp(x^{(i)},y^{(i)})\\ &=\prod_{i=1}^m\prod_{j=1}^{n_i}p(x^{(i)}|y^{(i)})p(y^{(i)})\\ &=\prod_{i=1}^m(\prod_{j=1}^{n_i}p(x^{(i)}|y^{(i)};\phi_{i|y=1},\phi_{i|y=0})p(y^{(i)};\phi) \end{aligned}
L(ϕ,ϕi∣y=1,ϕi∣y=0)=i=1∏mp(x(i),y(i))=i=1∏mj=1∏nip(x(i)∣y(i))p(y(i))=i=1∏m(j=1∏nip(x(i)∣y(i);ϕi∣y=1,ϕi∣y=0)p(y(i);ϕ)
使用最大似然函数后可以得到参数值为
ϕ
=
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
m
ϕ
k
∣
y
=
1
=
∑
i
=
1
m
∑
j
=
1
n
i
1
{
x
j
(
i
)
=
k
⋀
y
(
i
)
=
1
}
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
n
i
ϕ
k
∣
y
=
1
=
∑
i
=
1
m
∑
j
=
1
n
i
1
{
x
j
(
i
)
=
k
⋀
y
(
i
)
=
0
}
∑
i
=
1
m
1
{
y
(
i
)
=
0
}
n
i
\begin{aligned} \phi&=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}}{m}\\ \phi_{k|y=1}&=\frac{\sum_{i=1}^m\sum_{j=1}^{n_i}1\{x^{(i)}_j=k\bigwedge y^{(i)}=1\}}{\sum_{i=1}^m1\{y^{(i)}=1\}n_i}\\ \phi_{k|y=1}&=\frac{\sum_{i=1}^m\sum_{j=1}^{n_i}1\{x^{(i)}_j=k\bigwedge y^{(i)}=0\}}{\sum_{i=1}^m1\{y^{(i)}=0\}n_i} \end{aligned}
ϕϕk∣y=1ϕk∣y=1=m∑i=1m1{y(i)=1}=∑i=1m1{y(i)=1}ni∑i=1m∑j=1ni1{xj(i)=k⋀y(i)=1}=∑i=1m1{y(i)=0}ni∑i=1m∑j=1ni1{xj(i)=k⋀y(i)=0}
结合使用Laplace平滑后,参数计算公式修改为
ϕ
=
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
m
ϕ
k
∣
y
=
1
=
∑
i
=
1
m
∑
j
=
1
n
i
1
{
x
j
(
i
)
=
k
⋀
y
(
i
)
=
1
}
+
1
∑
i
=
1
m
1
{
y
(
i
)
=
1
}
n
i
+
∣
V
∣
ϕ
k
∣
y
=
1
=
∑
i
=
1
m
∑
j
=
1
n
i
1
{
x
j
(
i
)
=
k
⋀
y
(
i
)
=
0
}
+
1
∑
i
=
1
m
1
{
y
(
i
)
=
0
}
n
i
+
∣
V
∣
\begin{aligned} \phi&=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}}{m}\\ \phi_{k|y=1}&=\frac{\sum_{i=1}^m\sum_{j=1}^{n_i}1\{x^{(i)}_j=k\bigwedge y^{(i)}=1\}+1}{\sum_{i=1}^m1\{y^{(i)}=1\}n_i+|V|}\\ \phi_{k|y=1}&=\frac{\sum_{i=1}^m\sum_{j=1}^{n_i}1\{x^{(i)}_j=k\bigwedge y^{(i)}=0\}+1}{\sum_{i=1}^m1\{y^{(i)}=0\}n_i+|V|} \end{aligned}
ϕϕk∣y=1ϕk∣y=1=m∑i=1m1{y(i)=1}=∑i=1m1{y(i)=1}ni+∣V∣∑i=1m∑j=1ni1{xj(i)=k⋀y(i)=1}+1=∑i=1m1{y(i)=0}ni+∣V∣∑i=1m∑j=1ni1{xj(i)=k⋀y(i)=0}+1
虽然朴素贝叶斯分类器比较简单,但可以实现较快的训练速度,因此我们一般可以先使用朴素贝叶斯来训练查看训练结果,结果不错再进行长时间的训练。