[CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑

本文对应的是吴恩达老师的CS229机器学习的第五课。这节课介绍了判别学习算法和生成学习算法,并给出了生成学习算法的一个实例:利用朴素贝叶斯进行垃圾邮件分类。


判别学习(Discriminative Learning)与生成学习(Generative Learning)

对于机器学习的任务,可以简单描述为:给定一个输入点 x x x,建立模型求其预测值 h θ ( x ) h_\theta(x) hθ(x)。从贝叶斯学派的角度看,我们的目的就是建模 P ( y ∣ x ) P(y|x) P(yx)。那么,由贝叶斯公式,我们显然可以得到两种不同的建模方式:

  1. 判别学习方法,这种方式下,我们建立的模型将直接学习后验分布 P ( y ∣ x ) P(y|x) P(yx),或者直接学习一个将输入映射到某类的函数 h θ ( x ) ∈ { 0 , 1 } h_\theta(x)\in \{0,1\} hθ(x){0,1}
  2. 生成学习方法,与判别学习方法相对应,则是对 P ( x ∣ y ) P(x|y) P(xy) 以及 P ( y ) P(y) P(y) 建模,从而习得 x , y x,y x,y 的一个联合分布 P ( x , y ) P(x,y) P(x,y),然后通过贝叶斯定理 P ( y ∣ x ) = P ( x ∣ y ) P ( y ) P ( x ) P(y|x)=\frac{P(x|y)P(y)}{P(x)} P(yx)=P(x)P(xy)P(y) 得到 P ( y ∣ x ) P(y|x) P(yx)

高斯判别分析(Gaussian Discriminative Analysis)

接下来我们介绍一个生成学习的例子:高斯判别分析。注意,名字虽然是判别,但它是一个生成学习的例子。

根据之前的描述我们知道,生成模型的关键在于对 P ( x ∣ y ) P( \bold{x} |y) P(xy) 的建模。对于独立分布的输入以及自然噪声等,高斯模型往往是一个不错的选择。于是,我们假设输入数据分布满足高斯分布,即

P ( x ; μ , Σ ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 exp ⁡ ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) P(\bold{x};\mu,\Sigma)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}\exp{\left(-\frac{1}{2}(\bold{x}-\mu)^T\Sigma^{-1}(\bold{x}-\mu)\right)} P(x;μ,Σ)=(2π)2nΣ211exp(21(xμ)TΣ1(xμ))

其中, μ \mu μ x \bold{x} x 的均值,计算公式为

μ = 1 m ∑ i = 1 m x i \mu=\frac{1}{m}\sum_{i=1}^m x_i μ=m1i=1mxi

Σ \Sigma Σ x \bold{x} x 的方差,计算公式为

Σ = E [ ( x − E [ x ] ) ( X − E [ x ] ) T ] = E [ x x T ] − E [ x ] E [ x ] T \Sigma = \Bbb{E}\left[(\bold{x}-\Bbb{E}[\bold{x}])(X-\Bbb{E}[\bold{x}])^T\right]=\Bbb{E}[\bold{x}\bold{x}^T]-\Bbb{E}[\bold{x}]\Bbb{E}[\bold{x}]^T Σ=E[(xE[x])(XE[x])T]=E[xxT]E[x]E[x]T

注意,协方差矩阵是对称的半正定矩阵


上图的三个模型均值都为 0 0 0,协方差分别为 [ 1 0 0 1 ] ; [ 1 0.5 0.5 1 ] ; [ 1 0.8 0.8 1 ] \begin{bmatrix}1&0\\0&1\end{bmatrix}; \begin{bmatrix}1&0.5\\0.5&1\end{bmatrix}; \begin{bmatrix}1&0.8\\0.8&1\end{bmatrix} [1001];[10.50.51];[10.80.81]

我们同样可以在二维平面内用等高线图画出高斯函数,如下图

[CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑_第1张图片
上图的三个模型均值都为 0 0 0,协方差分别为 [ 1 − 0.5 − 0.5 1 ] ; [ 1 − 0.8 − 0.8 1 ] ; [ 3 0.8 0.8 1 ] \begin{bmatrix}1&-0.5\\-0.5&1\end{bmatrix}; \begin{bmatrix}1&-0.8\\-0.8&1\end{bmatrix}; \begin{bmatrix}3&0.8\\0.8&1\end{bmatrix} [10.50.51];[10.80.81];[30.80.81]。可以看出当协方差矩阵的对角不为 0 0 0 时,高斯函数的图像上的 x x x x x x 就有了相关性,即图像发生了拉伸、偏斜。

高斯判别分析的公式推导

接下来,我们就正式开始推导高斯判别分析的建模过程。首先,我们的目标是二分类问题,于是我们可以假设 y y y 服从伯努利分布

P ( y ) = ϕ y ( 1 − ϕ ) ( 1 − y ) (1) P(y)=\phi^y(1-\phi)^{(1-y)}\tag 1 P(y)=ϕy(1ϕ)(1y)(1)

结合前述高斯函数,我们不妨设 y = 0 y=0 y=0 y = 1 y=1 y=1 情况下的点分别服从两个参数不同的高斯分布(一般在高斯判别分析中,我们设两者的方差相同),即

P ( x ∣ y = 0 ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 exp ⁡ ( − 1 2 ( x − μ 0 ) T Σ − 1 ( x − μ 0 ) ) (2) P(\bold{x}|y=0)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}\exp{\left(-\frac{1}{2}(\bold{x}-\mu_0)^T\Sigma^{-1}(\bold{x}-\mu_0)\right)}\tag 2 P(xy=0)=(2π)2nΣ211exp(21(xμ0)TΣ1(xμ0))(2)

P ( x ∣ y = 1 ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 exp ⁡ ( − 1 2 ( x − μ 1 ) T Σ − 1 ( x − μ 1 ) ) (3) P(\bold{x}|y=1)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}\exp{\left(-\frac{1}{2}(\bold{x}-\mu_1)^T\Sigma^{-1}(\bold{x}-\mu_1)\right)}\tag 3 P(xy=1)=(2π)2nΣ211exp(21(xμ1)TΣ1(xμ1))(3)

根据贝叶斯定理,我们可以得到待求对数似然函数(注意到贝叶斯定理中的 P ( x ) P(x) P(x) 实际上对所有类标记均相同,因此在考虑似然函数的时候可以不必加入):

l ( ϕ , μ 0 , μ 1 , Σ ) = log ⁡ ∏ i = 1 m P ( x ( i ) , y ( i ) ; ϕ , μ 0 , μ 1 , Σ ) = log ⁡ ∏ i = 1 m P ( x ( i ) ∣ y ( i ) ; μ 0 , μ 1 , Σ ) P ( y ( i ) ; ϕ ) = ∑ i = 1 m log ⁡ P ( x ( i ) ∣ y ( i ) ; μ 0 , μ 1 , Σ ) P ( y ( i ) ; ϕ ) \begin{aligned}l(\phi, \mu_0, \mu_1, \Sigma)&=\log{\prod_{i=1}^m P(x^{(i)}, y^{(i)}; \phi, \mu_0, \mu_1, \Sigma)}\\ &=\log \prod_{i=1}^m P(x^{(i)}| y^{(i)}; \mu_0, \mu_1, \Sigma)P(y^{(i)}; \phi)\\ &=\sum_{i=1}^m\log P(x^{(i)}| y^{(i)}; \mu_0, \mu_1, \Sigma)P(y^{(i)}; \phi)\end{aligned} l(ϕ,μ0,μ1,Σ)=logi=1mP(x(i),y(i);ϕ,μ0,μ1,Σ)=logi=1mP(x(i)y(i);μ0,μ1,Σ)P(y(i);ϕ)=i=1mlogP(x(i)y(i);μ0,μ1,Σ)P(y(i);ϕ)

( 1 ) , ( 2 ) , ( 3 ) (1), (2), (3) (1),(2),(3) 式代入上式,可以得到:

l ( ϕ , μ 0 , μ 1 , Σ ) = ∑ i = 1 m log ⁡ ( 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 exp ⁡ ( − 1 2 ( x ( i ) − μ y ( i ) ) T Σ − 1 ( x ( i ) − μ y ( i ) ) ) ϕ y ( i ) ( 1 − ϕ ) ( 1 − y ( i ) ) ) = ∑ i = 1 m [ − n 2 log ⁡ ( 2 π ) − 1 2 log ⁡ ∣ Σ ∣ − 1 2 ( x ( i ) − μ y ( i ) ) T Σ − 1 ( x ( i ) − μ y ( i ) ) + y ( i ) log ⁡ ϕ + ( 1 − y ( i ) ) log ⁡ ( 1 − ϕ ) ] \begin{aligned}l(\phi, \mu_0, \mu_1, \Sigma)=\sum_{i=1}^m&\log\left(\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}\exp{\left(-\frac{1}{2}(x^{(i)}-\mu_{y^{(i)}})^T\Sigma^{-1}(x^{(i)}-\mu_{y^{(i)}})\right)} \phi^{y^{(i)}}(1-\phi)^{(1-y^{(i)})}\right)\\ =\sum_{i=1}^m&\left[-\frac{n}{2}\log(2\pi)-\frac{1}{2}\log |\Sigma|-\frac{1}{2}(x^{(i)}-\mu_{y^{(i)}})^T\Sigma^{-1}(x^{(i)}-\mu_{y^{(i)}})\right.\\ &\left. +y^{(i)}\log \phi+\left(1-y^{(i)}\right)\log(1-\phi)\right]\end{aligned} l(ϕ,μ0,μ1,Σ)=i=1m=i=1mlog((2π)2nΣ211exp(21(x(i)μy(i))TΣ1(x(i)μy(i)))ϕy(i)(1ϕ)(1y(i)))[2nlog(2π)21logΣ21(x(i)μy(i))TΣ1(x(i)μy(i))+y(i)logϕ+(1y(i))log(1ϕ)]

利用最大对数似然函数的方法,就可以算出各个参数的值。注意在求导过程中,我们只需计算含有待求参数的部分即可。

下面是 ϕ \phi ϕ 的最大似然的求解过程,考虑到我们研究的是二分类问题,因此在求解 ϕ \phi ϕ μ 0 , μ 1 \mu_0, \mu_1 μ0,μ1 的时候我们可以将 m m m 个样本分为 y = 0 y=0 y=0 y = 1 y=1 y=1 两类。另外,我们设 y = 1 y=1 y=1 的类共包含 k k k 个样本,那么显然 y = 0 y=0 y=0 的类就包含 m − k m-k mk 个样本(变量 k k k 最终计算后会销去,见下)。

0 = ∂ l ∂ ϕ = ∂ ∑ i = 1 m [ y ( i ) log ⁡ ϕ + ( 1 − y ( i ) ) log ⁡ ( 1 − ϕ ) ] ∂ ϕ = ∂ ∑ i = 1 m [ 1 { y ( i ) = 1 } log ⁡ ϕ + 1 { y ( i ) = 1 } log ⁡ ( 1 − ϕ ) ] ∂ ϕ = ∂ [ k log ⁡ ϕ + ( m − k ) log ⁡ ( 1 − ϕ ) ] ∂ ϕ = − ( m − k ) 1 − ϕ + k ϕ    ⟹    ϕ MLE = k m = 1 m ∑ i = 1 m 1 { y ( i ) = 1 } \begin{aligned}0&=\frac{\partial l}{\partial \phi}\\ &= \frac{\partial \sum_{i=1}^m\left[y^{(i)}\log \phi +\left(1-y^{(i)}\right)\log(1-\phi)\right]}{\partial \phi}\\ &= \frac{\partial \sum_{i=1}^m\left[\mathbb{1}\{y^{(i)}=1\}\log \phi +\mathbb{1}\{y^{(i)}=1\}\log(1-\phi)\right]}{\partial \phi}\\ &= \frac{\partial\left[ k\log\phi+(m-k)\log(1-\phi)\right]}{\partial \phi}\\ &= \frac{-(m-k)}{1-\phi}+\frac{k}{\phi}\\ \implies \phi_{\text{MLE}}&=\frac{k}{m}\\ &=\frac{1}{m}\sum_{i=1}^m\mathbb{1}\{y^{(i)}=1\}\end{aligned} 0ϕMLE=ϕl=ϕi=1m[y(i)logϕ+(1y(i))log(1ϕ)]=ϕi=1m[1{y(i)=1}logϕ+1{y(i)=1}log(1ϕ)]=ϕ[klogϕ+(mk)log(1ϕ)]=1ϕ(mk)+ϕk=mk=m1i=1m1{y(i)=1}

显而易见, ϕ \phi ϕ 的最大似然的解就是 y = 1 y=1 y=1 的类别的数目占总样本数的比例。接着,我们给出 y = 0 y=0 y=0 类的 μ 0 \mu_0 μ0 的最大似然求解过程( μ 1 \mu_1 μ1 计算方法类似,从略),其中利用了一个矩阵求导公式 ∂ x T A x ∂ A = 2 A x \frac{\partial x^TAx}{\partial A}=2Ax AxTAx=2Ax

0 = ∂ ∑ i = 1 m 1 { y ( i ) = 0 } [ − 1 2 ( x ( i ) − μ 0 ) T Σ − 1 ( x ( i ) − μ 0 ) ] ∂ μ 0 = ∑ i = 1 m 1 { y ( i ) = 0 } [ − 1 2 ⋅ 2 ( x ( i ) − μ 0 ) Σ − 1 ⋅ ( − 1 ) ] = ∑ i = 1 m 1 { y ( i ) = 0 } ( x ( i ) − μ 0 ) Σ − 1 = ∑ i = 1 m 1 { y ( i ) = 0 } x ( i ) Σ − 1 − ∑ i = 1 m 1 { y ( i ) = 0 } μ 0 Σ − 1    ⟹    μ 0 MLE = ( ∑ i = 1 m 1 { y ( i ) = 0 } x ( i ) ) Σ − 1 ( ∑ i = 1 m 1 { y ( i ) = 0 } ) Σ − 1 = ∑ i = 1 m 1 { y ( i ) = 0 } x ( i ) ∑ i = 1 m 1 { y ( i ) = 0 } \begin{aligned}0&=\frac{\partial\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}\left[-\frac{1}{2}(x^{(i)}-\mu_{0})^T\Sigma^{-1}(x^{(i)}-\mu_{0})\right]}{\partial \mu_0}\\ &=\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}\left[-\frac{1}{2}\cdot2(x^{(i)}-\mu_{0})\Sigma^{-1}\cdot(-1)\right]\\ &=\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}(x^{(i)}-\mu_{0})\Sigma^{-1}\\ &=\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}x^{(i)}\Sigma^{-1}-\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}\mu_{0}\Sigma^{-1}\\ \implies {\mu_0}_{\text{MLE}}&=\frac{\left(\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}x^{(i)}\right)\Sigma^{-1}}{\left(\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}\right)\Sigma^{-1}}\\ &=\frac{\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}x^{(i)}}{\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}}\end{aligned} 0μ0MLE=μ0i=1m1{y(i)=0}[21(x(i)μ0)TΣ1(x(i)μ0)]=i=1m1{y(i)=0}[212(x(i)μ0)Σ1(1)]=i=1m1{y(i)=0}(x(i)μ0)Σ1=i=1m1{y(i)=0}x(i)Σ1i=1m1{y(i)=0}μ0Σ1=(i=1m1{y(i)=0})Σ1(i=1m1{y(i)=0}x(i))Σ1=i=1m1{y(i)=0}i=1m1{y(i)=0}x(i)

注意到上式就是将所有标签为 y = 0 y=0 y=0 的样本进行了求均值的计算。最后是 Σ \Sigma Σ 的最大似然计算,在计算开始前,先给出一个将会用到的矩阵求导公式: ∂ u A v ∂ A = u v T \frac{\partial u A v}{\partial A}=u v^T AuAv=uvT

0 = ∂ ∑ i = 1 m [ − 1 2 log ⁡ ∣ Σ ∣ − 1 2 ( x ( i ) − μ y ( i ) ) T Σ − 1 ( x ( i ) − μ y ( i ) ) ] ∂ Σ = − 1 2 ⋅ ∂ ∑ i = 1 m log ⁡ ∣ Σ ∣ ∂ Σ − 1 2 ⋅ ∂ ∑ i = 1 m ( x ( i ) − μ y ( i ) ) T Σ − 1 ( x ( i ) − μ y ( i ) ) ∂ Σ − 1 ⋅ ∂ Σ − 1 ∂ Σ = − 1 2 ∑ i = 1 m Σ − 1 − 1 2 ∑ i = 1 m ( x ( i ) − μ y ( i ) ) ( x ( i ) − μ y ( i ) ) T ( − Σ − 2 ) = − 1 2 ( m Σ − ∑ i = 1 m ( x ( i ) − μ y ( i ) ) ( x ( i ) − μ y ( i ) ) T ) Σ − 2    ⟹    Σ MLE = 1 m ∑ i = 1 m ( x ( i ) − μ y ( i ) ) ( x ( i ) − μ y ( i ) ) T \begin{aligned}0&=\frac{\partial\sum_{i=1}^m \left[-\frac{1}{2}\log|\Sigma|-\frac{1}{2}(x^{(i)}-\mu_{y^{(i)}})^T\Sigma^{-1}(x^{(i)}-\mu_{y^{(i)}})\right]}{\partial \Sigma}\\ &=-\frac{1}{2}\cdot\frac{\partial \sum_{i=1}^{m}\log|\Sigma|}{\partial \Sigma}-\frac{1}{2}\cdot\frac{\partial \sum_{i=1}^m (x^{(i)}-\mu_{y^{(i)}})^T\Sigma^{-1}(x^{(i)}-\mu_{y^{(i)}})}{\partial \Sigma^{-1}}\cdot\frac{\partial\Sigma^{-1}}{\partial\Sigma}\\ &=-\frac{1}{2}\sum_{i=1}^m \Sigma^{-1}-\frac{1}{2}\sum_{i=1}^m(x^{(i)}-\mu_{y^{(i)}}) (x^{(i)}-\mu_{y^{(i)}})^T(-\Sigma^{-2})\\ &=-\frac{1}{2}\left(m\Sigma-\sum_{i=1}^m(x^{(i)}-\mu_{y^{(i)}}) (x^{(i)}-\mu_{y^{(i)}})^T\right)\Sigma^{-2}\\ \implies \Sigma_{\text{MLE}}&=\frac{1}{m}\sum_{i=1}^m(x^{(i)}-\mu_{y^{(i)}}) (x^{(i)}-\mu_{y^{(i)}})^T\end{aligned} 0ΣMLE=Σi=1m[21logΣ21(x(i)μy(i))TΣ1(x(i)μy(i))]=21Σi=1mlogΣ21Σ1i=1m(x(i)μy(i))TΣ1(x(i)μy(i))ΣΣ1=21i=1mΣ121i=1m(x(i)μy(i))(x(i)μy(i))T(Σ2)=21(mΣi=1m(x(i)μy(i))(x(i)μy(i))T)Σ2=m1i=1m(x(i)μy(i))(x(i)μy(i))T

注意到这同样可以从方差的定义式直接求出。综上所述,我们可以得出如下高斯判别分析各参数的解:

ϕ = 1 m ∑ i = 1 m 1 { y ( i ) = 1 } \large \phi=\frac{1}{m}\sum_{i=1}^m\mathbb{1}\{y^{(i)}=1\} ϕ=m1i=1m1{y(i)=1}

μ 0 = ∑ i = 1 m 1 { y ( i ) = 0 } x ( i ) ∑ i = 1 m 1 { y ( i ) = 0 } \large \mu_0=\frac{\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}x^{(i)}}{\sum_{i=1}^m\mathbb{1}\{y^{(i)}=0\}} μ0=i=1m1{y(i)=0}i=1m1{y(i)=0}x(i)

μ 1 = ∑ i = 1 m 1 { y ( i ) = 1 } x ( i ) ∑ i = 1 m 1 { y ( i ) = 1 } \large \mu_1=\frac{\sum_{i=1}^m\mathbb{1}\{y^{(i)}=1\}x^{(i)}}{\sum_{i=1}^m\mathbb{1}\{y^{(i)}=1\}} μ1=i=1m1{y(i)=1}i=1m1{y(i)=1}x(i)

Σ = 1 m ∑ i = 1 m ( x ( i ) − μ y ( i ) ) ( x ( i ) − μ y ( i ) ) T \large \Sigma=\frac{1}{m}\sum_{i=1}^m (x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T Σ=m1i=1m(x(i)μy(i))(x(i)μy(i))T

高斯判别分析与逻辑回归

到现在为止,我们已经完成了对各个参数的极大似然估计。接下来,我们就可以回过头去重新分析 ( 1 ) , ( 2 ) , ( 3 ) (1), (2), (3) (1),(2),(3) 式,并给出高斯判别分析的分类方法。我们以 y = 1 y=1 y=1 类别为例,由贝叶斯定理,我们可以写出:

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 ) = N ( μ 1 , Σ ) ϕ N ( μ 0 , Σ ) ( 1 − ϕ ) + N ( μ 1 , Σ ) ϕ = 1 1 + N ( μ 0 , Σ ) ( 1 − ϕ ) N ( μ 1 , Σ ) ϕ = 1 1 + 1 − ϕ ϕ exp ⁡ ( 1 2 ( x − μ 1 ) T Σ − 1 ( x − μ 1 ) − 1 2 ( x − μ 0 ) T Σ − 1 ( x − μ 0 ) ) = 1 1 + exp ⁡ ( log ⁡ 1 − ϕ ϕ ) ⋅ exp ⁡ ( 1 2 ( μ 0 T Σ − 1 x + x T Σ − 1 μ 0 − μ 0 T Σ − 1 μ 0 − μ 1 T Σ − 1 x − x T Σ − 1 μ 1 + μ 1 T Σ − 1 μ 1 ) ) \begin{aligned}P(y=1|\bold{x})&=\frac{P(\bold{x}|y=1)P(y=1)}{P(\bold{x}|y=1)P(y=1)+P(\bold{x}|y=0)P(y=0)}\\ &=\frac{N(\mu_1,\Sigma)\phi}{N(\mu_0,\Sigma)(1-\phi)+N(\mu_1,\Sigma)\phi}\\ &=\frac{1}{1+\frac{N(\mu_0,\Sigma)(1-\phi)}{N(\mu_1,\Sigma)\phi}}\\ &=\frac{1}{1+\frac{1-\phi}{\phi}\exp{\left(\frac{1}{2}(\bold{x}-\mu_1)^T\Sigma^{-1}(\bold{x}-\mu_1)-\frac{1}{2}(\bold{x}-\mu_0)^T\Sigma^{-1}(\bold{x}-\mu_0)\right)}}\\ &=\frac{1}{1+\exp{\left(\log\frac{1-\phi}{\phi}\right)}\cdot\exp{\left(\frac{1}{2}\left(\mu_0^T\Sigma^{-1}\bold{x}+\bold{x}^T\Sigma^{-1}\mu_0-\mu_0^T\Sigma^{-1}\mu_0-\mu_1^T\Sigma^{-1}\bold{x}-\bold{x}^T\Sigma^{-1}\mu_1+\mu_1^T\Sigma^{-1}\mu_1\right)\right)}}\\ \end{aligned} P(y=1x)=P(xy=1)P(y=1)+P(xy=0)P(y=0)P(xy=1)P(y=1)=N(μ0,Σ)(1ϕ)+N(μ1,Σ)ϕN(μ1,Σ)ϕ=1+N(μ1,Σ)ϕN(μ0,Σ)(1ϕ)1=1+ϕ1ϕexp(21(xμ1)TΣ1(xμ1)21(xμ0)TΣ1(xμ0))1=1+exp(logϕ1ϕ)exp(21(μ0TΣ1x+xTΣ1μ0μ0TΣ1μ0μ1TΣ1xxTΣ1μ1+μ1TΣ1μ1))1

注意到 x x x Σ − 1 μ \Sigma^{-1}\mu Σ1μ 均为向量,且 Σ \Sigma Σ 为对称矩阵,因此 x T Σ − 1 μ = ( Σ − 1 μ ) T x = μ T Σ − 1 x x^T\Sigma^{-1}\mu = (\Sigma^{-1}\mu)^Tx=\mu^T\Sigma^{-1}x xTΣ1μ=(Σ1μ)Tx=μTΣ1x,因此,上式可以继续化简为:

P ( y = 1 ∣ x ) = 1 1 + exp ⁡ ( − ( μ 1 T − μ 0 T ) Σ − 1 x ⏟ − w T x + 1 2 ( log ⁡ 1 − ϕ ϕ + μ 1 T Σ − 1 μ 1 − μ 0 T Σ − 1 μ 0 ) ⏟ b i a s ) = 1 1 + e − θ T x ′ \begin{aligned}P(y=1|\bold{x})&=\frac{1}{1+\exp{\left(\underbrace{-(\mu_1^T-\mu_0^T)\Sigma^{-1}\bold{x}}_{-\bf{w}^T\bold{x}}+\underbrace{\frac{1}{2}\left(\log\frac{1-\phi}{\phi}+\mu_1^T\Sigma^{-1}\mu_1-\mu_0^T\Sigma^{-1}\mu_0\right)}_{bias}\right)}}\\ &=\frac{1}{1+e^{-\bold{\theta}^T \bold{x}^{\prime}}}\end{aligned} P(y=1x)=1+expwTx (μ1Tμ0T)Σ1x+bias 21(logϕ1ϕ+μ1TΣ1μ1μ0TΣ1μ0)1=1+eθTx1

我们可以清楚地发现,这就是逻辑回归公式,也就是说,我们用高斯判别分析进行建模得到的生成模型,其实分类效果是与逻辑回归一致的。如下图所示,我们随机取了两类点,并对其分别进行高斯建模,最终得到的生成模型是一个逻辑函数。

[CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑_第2张图片

实际上,可以证明,只要我们取的似然函数 P ( x ∣ y ) P(x|y) P(xy) 服从指数族分布,则必然可以推出生成模型 P ( y ∣ x ) P(y|x) P(yx) 是逻辑函数。反之,若生成模型 P ( y ∣ x ) P(y|x) P(yx) 是逻辑函数,不能推出似然函数 P ( x ∣ y ) P(x|y) P(xy) 服从指数族分布。


朴素贝叶斯(naive Bayes)与垃圾邮件分类

接下来,简单介绍一个生成模型的实际应用场景:垃圾邮件分类。

词向量

首先我们介绍一下词向量。无论中文英文,计算机本质上都是无法识别的,那么我们如何将单词变为计算机可以识别的输入呢?一个很简单的方式就是将是否有某个单词用 0 0 0 1 1 1 来表示,这种方法我们称为独热编码(one-hot encoding)。具体来说,假设我们有一个50000单词的常见单词表,那么我们就可以将某封邮件中是否存在某个单词用 0 0 0 1 1 1 来表示。例如,若某封邮件中出现了单词 a 和 buy,我们就可以写出如下词向量:

x = [ 1 0 0 ⋮ 1 ⋮ 0 ]           a aardvark aardwolf ⋮ buy ⋮ zygmurgy x=\begin{bmatrix}1\\0\\0\\\vdots\\1\\\vdots\\0\end{bmatrix}\space\space\space\space\space\space\space\space\space\begin{matrix}\text{a}\\\text{aardvark}\\\text{aardwolf} \\\vdots\\\text{buy}\\\vdots\\\text{zygmurgy}\end{matrix} x=10010         aaardvarkaardwolfbuyzygmurgy

这个映射方式十分简单方便,但却并不能体现各个单词之间的关系。在神经网络训练中我们往往会用预训练的embedding作为输入(如word2vec),这里不作展开。

接着,我们假设输入数据是条件独立的,即

P ( x 1 , x 2 , ⋯   , x 50000 ∣ y ) = P ( x 1 ∣ y ) P ( x 2 ∣ y ) ⋯ P ( x 50000 ∣ y ) = ∏ i = 1 50000 P ( x i ∣ y ) P(x_1,x_2,\cdots,x_{50000}|y)=P(x_1|y)P(x_2|y)\cdots P(x_{50000}|y)=\prod_{i=1}^{50000}P(x_i|y) P(x1,x2,,x50000y)=P(x1y)P(x2y)P(x50000y)=i=150000P(xiy)

举一个例子,假设某封邮件中出现了 x 1 , x 2000 x_1, x_{2000} x1,x2000 两个单词,根据之前推导的贝叶斯公式,这封邮件是垃圾邮件的概率就是:

P ( y = 1 ∣ x 1 , x 2000 ) = P ( x 1 , x 2000 ∣ y = 1 ) P ( y = 1 ) P ( x 1 , x 2000 ∣ y = 1 ) P ( y = 1 ) + P ( x 1 , x 2000 ∣ y = 0 ) P ( y = 0 ) (4) P(y=1|x_1,x_{2000})=\frac{P(x_1,x_{2000}|y=1)P(y=1)}{P(x_1,x_{2000}|y=1)P(y=1)+P(x_1,x_{2000}|y=0)P(y=0)}\tag4 P(y=1x1,x2000)=P(x1,x2000y=1)P(y=1)+P(x1,x2000y=0)P(y=0)P(x1,x2000y=1)P(y=1)(4)

同样,在利用最大似然时,我们不必关注归一化项,似然函数可以写为:

L ( ϕ y , ϕ j ∣ y = 1 , ϕ j ∣ y = 0 ) = ∏ i = 1 m P ( x ( i ) , y ( i ) ) L(\phi_y, \phi_{j|y=1}, \phi_{j|y=0})=\prod_{i=1}^{m}P(x^{(i)}, y^{(i)}) L(ϕy,ϕjy=1,ϕjy=0)=i=1mP(x(i),y(i))

其中 ϕ j ∣ y = 1 \phi_{j|y=1} ϕjy=1 表示垃圾邮件中出现单词 x j x_j xj 的概率, ϕ j ∣ y = 0 \phi_{j|y=0} ϕjy=0 表示非垃圾邮件中出现单词 x j x_j xj 的概率。利用与前文类似的推导,可以得到各参数的最大似然估计:

ϕ y = ∑ i = 1 m 1 { y ( i ) = 1 } m \phi_y=\frac{\sum_{i=1}^m \mathbb{1}\{y^{(i)}=1\}}{m} ϕy=mi=1m1{y(i)=1}

ϕ j ∣ y = 1 = ∑ i = 1 m 1 { y ( i ) = 1 ∧ x j ( i ) = 1 } ∑ i = 1 m 1 { y ( i ) = 1 } \phi_{j|y=1}=\frac{\sum_{i=1}^m \mathbb{1}\{y^{(i)}=1 \wedge x_j^{(i)}=1\}}{\sum_{i=1}^m \mathbb{1}\{y^{(i)}=1\}} ϕjy=1=i=1m1{y(i)=1}i=1m1{y(i)=1xj(i)=1}

ϕ j ∣ y = 0 = ∑ i = 1 m 1 { y ( i ) = 0 ∧ x j ( i ) = 1 } ∑ i = 1 m 1 { y ( i ) = 0 } \phi_{j|y=0}=\frac{\sum_{i=1}^m \mathbb{1}\{y^{(i)}=0 \wedge x_j^{(i)}=1\}}{\sum_{i=1}^m \mathbb{1}\{y^{(i)}=0\}} ϕjy=0=i=1m1{y(i)=0}i=1m1{y(i)=0xj(i)=1}

可以看出, ϕ j ∣ y = 1 \phi_{j|y=1} ϕjy=1 的最大似然估计就等于训练样本中是垃圾邮件且出现了单词 x j x_j xj 的样本数量占总垃圾邮件的百分比。于是,利用最大似然估计作为概率 P ( x j ∣ y ) = ϕ j ∣ y P(x_j|y)=\phi_{j|y} P(xjy)=ϕjy,以及 P ( y ) P(y) P(y) 的最大似然估计(前文已证),我们就可以得到我们的朴素贝叶斯模型(类似 ( 4 ) (4) (4) 式),然后我们就可以用它来预测给定邮件是否为垃圾邮件。

拉普拉斯平滑(Laplace smoothing)

但是上述情况会出现一个问题,假设我们所有用于训练的邮件中没有出现单词 x 2000 x_{2000} x2000,但是在我们需要预测的邮件中出现了,那么我们的朴素贝叶斯模型会怎么处理这个问题呢?

我们同样以 ( 4 ) (4) (4) 式为例,这个时候我们发现,如果训练邮件中却没有包含 x 2000 x_{2000} x2000,那么垃圾邮件与非垃圾中包含 x 2000 x_{2000} x2000 的概率的似然估计都是 0 0 0,即 P ( x 2000 ∣ y = 1 ) = ϕ 2000 ∣ y = 1 = 0 , P ( x 2000 ∣ y = 0 ) = ϕ 2000 ∣ y = 0 = 0 P(x_{2000}|y=1)=\phi_{2000|y=1}=0, P(x_{2000}|y=0)=\phi_{2000|y=0}=0 P(x2000y=1)=ϕ2000y=1=0,P(x2000y=0)=ϕ2000y=0=0。根据条件独立的假设, ( 4 ) (4) (4) 式自然就可以写为

P ( y = 1 ∣ x 1 , x 2000 ) = P ( x 1 , x 2000 ∣ y = 1 ) P ( y = 1 ) P ( x 1 , x 2000 ∣ y = 1 ) P ( y = 1 ) + P ( x 1 , x 2000 ∣ y = 0 ) P ( y = 0 ) = P ( x 1 ∣ y = 1 ) P ( x 2000 ∣ y = 1 ) P ( y = 1 ) P ( x 1 ∣ y = 1 ) P ( x 2000 ∣ y = 1 ) P ( y = 1 ) + P ( x 1 ∣ y = 0 ) P ( x 2000 ∣ y = 0 ) P ( y = 0 ) = 0 0 \begin{aligned}P(y=1|x_1,x_{2000})&=\frac{P(x_1,x_{2000}|y=1)P(y=1)}{P(x_1,x_{2000}|y=1)P(y=1)+P(x_1,x_{2000}|y=0)P(y=0)}\\ &=\frac{P(x_1|y=1)P(x_{2000}|y=1)P(y=1)}{P(x_1|y=1)P(x_{2000}|y=1)P(y=1)+P(x_1|y=0)P(x_{2000}|y=0)P(y=0)}\\ &=\frac{0}{0}\end{aligned} P(y=1x1,x2000)=P(x1,x2000y=1)P(y=1)+P(x1,x2000y=0)P(y=0)P(x1,x2000y=1)P(y=1)=P(x1y=1)P(x2000y=1)P(y=1)+P(x1y=0)P(x2000y=0)P(y=0)P(x1y=1)P(x2000y=1)P(y=1)=00

这显然不是我们想要的结果,我们希望对于没有出现过的词,它对垃圾邮件或非垃圾邮件的作用是一样的,即各 50 % 50\% 50%。有一个方法技能避免 0 0 \frac{0}{0} 00 的出现,同时又使未见过的单词对分类不产生作用,即拉普拉斯平滑。

拉普拉斯平滑方法很简单,对于我们例子中的二分类任务,只需对最大似然中的每一类加一即可,即:

ϕ j ∣ y = 1 = ∑ i = 1 m 1 { y ( i ) = 1 ∧ x j ( i ) = 1 } + 1 ∑ i = 1 m 1 { y ( i ) = 1 } + 2 \phi_{j|y=1}=\frac{\sum_{i=1}^m \mathbb{1}\{y^{(i)}=1 \wedge x_j^{(i)}=1\}+1}{\sum_{i=1}^m \mathbb{1}\{y^{(i)}=1\}+2} ϕjy=1=i=1m1{y(i)=1}+2i=1m1{y(i)=1xj(i)=1}+1

ϕ j ∣ y = 0 = ∑ i = 1 m 1 { y ( i ) = 0 ∧ x j ( i ) = 1 } + 1 ∑ i = 1 m 1 { y ( i ) = 0 } + 2 \phi_{j|y=0}=\frac{\sum_{i=1}^m \mathbb{1}\{y^{(i)}=0 \wedge x_j^{(i)}=1\}+1}{\sum_{i=1}^m \mathbb{1}\{y^{(i)}=0\}+2} ϕjy=0=i=1m1{y(i)=0}+2i=1m1{y(i)=0xj(i)=1}+1

这样一来,对于没有出现过的单词, ϕ j ∣ y = 1 = ϕ j ∣ y = 0 = 0.5 \phi_{j|y=1}=\phi_{j|y=0}=0.5 ϕjy=1=ϕjy=0=0.5,后续就不会出现 0 0 \frac{0}{0} 00 这样无意义的解了。


最后,补充说明一下比较常见的判别学习与生成学习方法

常见的判别学习方法有:

  1. 线性回归(linear regression)
  2. 逻辑回归(logic regression)
  3. 神经网络(NN)
  4. 支持向量机(SVM)
  5. 高斯过程(Gaussian process)
  6. 条件随机场(conditional random field, CRF)
  7. 决策树(CART)
  8. 提升方法(Boosting)
  9. 感知机 (线性分类模型)
  10. k近邻法
  11. 传统神经网络(CNN,RNN)
  12. 最大熵模型(ME)
  13. 区分度训练

常见的生成学习方法有:

  1. 判别式分析
  2. 朴素贝叶斯(Naive Bayes)
  3. 混合高斯型(Gaussians)
  4. K近邻(KNN)
  5. 隐马尔科夫模型(HMM)
  6. 贝叶斯网络
  7. sigmoid 信念网
  8. 马尔科夫随机场(Markov random fields)
  9. 深度信念网络(DBN)
  10. 隐含狄利克雷分布(Latent Dirichlet allocation, LDA)
  11. 多专家模型(the mixture of experts model)
  12. 受限玻尔兹曼机(RBM)
  13. 深度玻尔兹曼机(DBM)
  14. 广义除噪自编码器(GDA)
  15. 生成对抗网络(GAN)
  16. 变分自编码器(VAE)
  17. 自回归模型(AR)

references:

常见生成式模型与判别式模型: https://www.cnblogs.com/zoe1101/p/10659255.html

你可能感兴趣的:(学习笔记-机器学习)