200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > [CS229学习笔记] 5.判别学习算法与生成学习算法 高斯判别分析 朴素贝叶斯 垃圾邮

[CS229学习笔记] 5.判别学习算法与生成学习算法 高斯判别分析 朴素贝叶斯 垃圾邮

时间:2023-08-26 10:35:16

相关推荐

[CS229学习笔记] 5.判别学习算法与生成学习算法 高斯判别分析 朴素贝叶斯 垃圾邮

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

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

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

判别学习方法,这种方式下,我们建立的模型将直接学习后验分布 P(y∣x)P(y|x)P(y∣x),或者直接学习一个将输入映射到某类的函数 hθ(x)∈{0,1}h_\theta(x)\in \{0,1\}hθ​(x)∈{0,1};生成学习方法,与判别学习方法相对应,则是对 P(x∣y)P(x|y)P(x∣y) 以及 P(y)P(y)P(y) 建模,从而习得 x,yx,yx,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(y∣x)=P(x)P(x∣y)P(y)​ 得到 P(y∣x)P(y|x)P(y∣x)。

高斯判别分析(Gaussian Discriminative Analysis)

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

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

P(x;μ,Σ)=1(2π)n2∣Σ∣12exp⁡(−12(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​∣Σ∣21​1​exp(−21​(x−μ)TΣ−1(x−μ))

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

μ=1m∑i=1mxi\mu=\frac{1}{m}\sum_{i=1}^m x_iμ=m1​i=1∑m​xi​

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

Σ=E[(x−E[x])(X−E[x])T]=E[xxT]−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[(x−E[x])(X−E[x])T]=E[xxT]−E[x]E[x]T

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

上图的三个模型均值都为 000,协方差分别为 [1001];[10.50.51];[10.80.81]\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}[10​01​];[10.5​0.51​];[10.8​0.81​]

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

上图的三个模型均值都为 000,协方差分别为 [1−0.5−0.51];[1−0.8−0.81];[30.80.81]\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}[1−0.5​−0.51​];[1−0.8​−0.81​];[30.8​0.81​]。可以看出当协方差矩阵的对角不为 000 时,高斯函数的图像上的 xxx 与 xxx 就有了相关性,即图像发生了拉伸、偏斜。

高斯判别分析的公式推导

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

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

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

P(x∣y=0)=1(2π)n2∣Σ∣12exp⁡(−12(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 2P(x∣y=0)=(2π)2n​∣Σ∣21​1​exp(−21​(x−μ0​)TΣ−1(x−μ0​))(2)

P(x∣y=1)=1(2π)n2∣Σ∣12exp⁡(−12(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 3P(x∣y=1)=(2π)2n​∣Σ∣21​1​exp(−21​(x−μ1​)TΣ−1(x−μ1​))(3)

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

l(ϕ,μ0,μ1,Σ)=log⁡∏i=1mP(x(i),y(i);ϕ,μ0,μ1,Σ)=log⁡∏i=1mP(x(i)∣y(i);μ0,μ1,Σ)P(y(i);ϕ)=∑i=1mlog⁡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=1∏m​P(x(i),y(i);ϕ,μ0​,μ1​,Σ)=logi=1∏m​P(x(i)∣y(i);μ0​,μ1​,Σ)P(y(i);ϕ)=i=1∑m​logP(x(i)∣y(i);μ0​,μ1​,Σ)P(y(i);ϕ)​

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

l(ϕ,μ0,μ1,Σ)=∑i=1mlog⁡(1(2π)n2∣Σ∣12exp⁡(−12(x(i)−μy(i))TΣ−1(x(i)−μy(i)))ϕy(i)(1−ϕ)(1−y(i)))=∑i=1m[−n2log⁡(2π)−12log⁡∣Σ∣−12(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=1∑m​=i=1∑m​​log((2π)2n​∣Σ∣21​1​exp(−21​(x(i)−μy(i)​)TΣ−1(x(i)−μy(i)​))ϕy(i)(1−ϕ)(1−y(i)))[−2n​log(2π)−21​log∣Σ∣−21​(x(i)−μy(i)​)TΣ−1(x(i)−μy(i)​)+y(i)logϕ+(1−y(i))log(1−ϕ)]​

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

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

0=∂l∂ϕ=∂∑i=1m[y(i)log⁡ϕ+(1−y(i))log⁡(1−ϕ)]∂ϕ=∂∑i=1m[1{y(i)=1}log⁡ϕ+1{y(i)=1}log⁡(1−ϕ)]∂ϕ=∂[klog⁡ϕ+(m−k)log⁡(1−ϕ)]∂ϕ=−(m−k)1−ϕ+kϕ⟹ϕMLE=km=1m∑i=1m1{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ϕ+(1−y(i))log(1−ϕ)]​=∂ϕ∂∑i=1m​[1{y(i)=1}logϕ+1{y(i)=1}log(1−ϕ)]​=∂ϕ∂[klogϕ+(m−k)log(1−ϕ)]​=1−ϕ−(m−k)​+ϕk​=mk​=m1​i=1∑m​1{y(i)=1}​

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

0=∂∑i=1m1{y(i)=0}[−12(x(i)−μ0)TΣ−1(x(i)−μ0)]∂μ0=∑i=1m1{y(i)=0}[−12⋅2(x(i)−μ0)Σ−1⋅(−1)]=∑i=1m1{y(i)=0}(x(i)−μ0)Σ−1=∑i=1m1{y(i)=0}x(i)Σ−1−∑i=1m1{y(i)=0}μ0Σ−1⟹μ0MLE=(∑i=1m1{y(i)=0}x(i))Σ−1(∑i=1m1{y(i)=0})Σ−1=∑i=1m1{y(i)=0}x(i)∑i=1m1{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⟹μ0​MLE​​=∂μ0​∂∑i=1m​1{y(i)=0}[−21​(x(i)−μ0​)TΣ−1(x(i)−μ0​)]​=i=1∑m​1{y(i)=0}[−21​⋅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=(∑i=1m​1{y(i)=0})Σ−1(∑i=1m​1{y(i)=0}x(i))Σ−1​=∑i=1m​1{y(i)=0}∑i=1m​1{y(i)=0}x(i)​​

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

0=∂∑i=1m[−12log⁡∣Σ∣−12(x(i)−μy(i))TΣ−1(x(i)−μy(i))]∂Σ=−12⋅∂∑i=1mlog⁡∣Σ∣∂Σ−12⋅∂∑i=1m(x(i)−μy(i))TΣ−1(x(i)−μy(i))∂Σ−1⋅∂Σ−1∂Σ=−12∑i=1mΣ−1−12∑i=1m(x(i)−μy(i))(x(i)−μy(i))T(−Σ−2)=−12(mΣ−∑i=1m(x(i)−μy(i))(x(i)−μy(i))T)Σ−2⟹ΣMLE=1m∑i=1m(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​[−21​log∣Σ∣−21​(x(i)−μy(i)​)TΣ−1(x(i)−μy(i)​)]​=−21​⋅∂Σ∂∑i=1m​log∣Σ∣​−21​⋅∂Σ−1∂∑i=1m​(x(i)−μy(i)​)TΣ−1(x(i)−μy(i)​)​⋅∂Σ∂Σ−1​=−21​i=1∑m​Σ−1−21​i=1∑m​(x(i)−μy(i)​)(x(i)−μy(i)​)T(−Σ−2)=−21​(mΣ−i=1∑m​(x(i)−μy(i)​)(x(i)−μy(i)​)T)Σ−2=m1​i=1∑m​(x(i)−μy(i)​)(x(i)−μy(i)​)T​

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

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

μ0=∑i=1m1{y(i)=0}x(i)∑i=1m1{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=1m​1{y(i)=0}∑i=1m​1{y(i)=0}x(i)​

μ1=∑i=1m1{y(i)=1}x(i)∑i=1m1{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=1m​1{y(i)=1}∑i=1m​1{y(i)=1}x(i)​

Σ=1m∑i=1m(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Σ=m1​i=1∑m​(x(i)−μy(i)​)(x(i)−μy(i)​)T

高斯判别分析与逻辑回归

到现在为止,我们已经完成了对各个参数的极大似然估计。接下来,我们就可以回过头去重新分析 (1),(2),(3)(1), (2), (3)(1),(2),(3) 式,并给出高斯判别分析的分类方法。我们以 y=1y=1y=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,Σ)ϕ=11+N(μ0,Σ)(1−ϕ)N(μ1,Σ)ϕ=11+1−ϕϕexp⁡(12(x−μ1)TΣ−1(x−μ1)−12(x−μ0)TΣ−1(x−μ0))=11+exp⁡(log⁡1−ϕϕ)⋅exp⁡(12(μ0TΣ−1x+xTΣ−1μ0−μ0TΣ−1μ0−μ1TΣ−1x−xTΣ−1μ1+μ1TΣ−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=1∣x)​=P(x∣y=1)P(y=1)+P(x∣y=0)P(y=0)P(x∣y=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​Σ−1x−xTΣ−1μ1​+μ1T​Σ−1μ1​))1​​

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

P(y=1∣x)=11+exp⁡(−(μ1T−μ0T)Σ−1x⏟−wTx+12(log⁡1−ϕϕ+μ1TΣ−1μ1−μ0TΣ−1μ0)⏟bias)=11+e−θTx′\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=1∣x)​=1+exp⎝⎜⎜⎛​−wTx−(μ1T​−μ0T​)Σ−1x​​+bias21​(logϕ1−ϕ​+μ1T​Σ−1μ1​−μ0T​Σ−1μ0​)​​⎠⎟⎟⎞​1​=1+e−θTx′1​​

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

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

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

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

词向量

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

x=[100⋮1⋮0]aaardvarkaardwolf⋮buy⋮zygmurgyx=\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=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​100⋮1⋮0​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​aaardvarkaardwolf⋮buy⋮zygmurgy​

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

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

P(x1,x2,⋯,x50000∣y)=P(x1∣y)P(x2∣y)⋯P(x50000∣y)=∏i=150000P(xi∣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​,⋯,x50000​∣y)=P(x1​∣y)P(x2​∣y)⋯P(x50000​∣y)=i=1∏50000​P(xi​∣y)

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

P(y=1∣x1,x2000)=P(x1,x2000∣y=1)P(y=1)P(x1,x2000∣y=1)P(y=1)+P(x1,x2000∣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)}\tag4P(y=1∣x1​,x2000​)=P(x1​,x2000​∣y=1)P(y=1)+P(x1​,x2000​∣y=0)P(y=0)P(x1​,x2000​∣y=1)P(y=1)​(4)

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

L(ϕy,ϕj∣y=1,ϕj∣y=0)=∏i=1mP(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​,ϕj∣y=1​,ϕj∣y=0​)=i=1∏m​P(x(i),y(i))

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

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

ϕj∣y=1=∑i=1m1{y(i)=1∧xj(i)=1}∑i=1m1{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\}}ϕj∣y=1​=∑i=1m​1{y(i)=1}∑i=1m​1{y(i)=1∧xj(i)​=1}​

ϕj∣y=0=∑i=1m1{y(i)=0∧xj(i)=1}∑i=1m1{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\}}ϕj∣y=0​=∑i=1m​1{y(i)=0}∑i=1m​1{y(i)=0∧xj(i)​=1}​

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

拉普拉斯平滑(Laplace smoothing)

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

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

P(y=1∣x1,x2000)=P(x1,x2000∣y=1)P(y=1)P(x1,x2000∣y=1)P(y=1)+P(x1,x2000∣y=0)P(y=0)=P(x1∣y=1)P(x2000∣y=1)P(y=1)P(x1∣y=1)P(x2000∣y=1)P(y=1)+P(x1∣y=0)P(x2000∣y=0)P(y=0)=00\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=1∣x1​,x2000​)​=P(x1​,x2000​∣y=1)P(y=1)+P(x1​,x2000​∣y=0)P(y=0)P(x1​,x2000​∣y=1)P(y=1)​=P(x1​∣y=1)P(x2000​∣y=1)P(y=1)+P(x1​∣y=0)P(x2000​∣y=0)P(y=0)P(x1​∣y=1)P(x2000​∣y=1)P(y=1)​=00​​

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

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

ϕj∣y=1=∑i=1m1{y(i)=1∧xj(i)=1}+1∑i=1m1{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}ϕj∣y=1​=∑i=1m​1{y(i)=1}+2∑i=1m​1{y(i)=1∧xj(i)​=1}+1​

ϕj∣y=0=∑i=1m1{y(i)=0∧xj(i)=1}+1∑i=1m1{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}ϕj∣y=0​=∑i=1m​1{y(i)=0}+2∑i=1m​1{y(i)=0∧xj(i)​=1}+1​

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

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

常见的判别学习方法有:

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

常见的生成学习方法有:

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

references:

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。