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


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

对于机器学习的任务,可以简单描述为:给定一个输入点 xxx,建立模型求其预测值 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,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(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π)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Σ211exp(21(xμ)TΣ1(xμ))

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

μ=1m∑i=1mxi\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[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[(xE[x])(XE[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}[1001];[10.50.51];[10.80.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}[10.50.51];[10.80.81];[30.80.81]。可以看出当协方差矩阵的对角不为 000 时,高斯函数的图像上的 xxxxxx 就有了相关性,即图像发生了拉伸、偏斜。

高斯判别分析的公式推导

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

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

结合前述高斯函数,我们不妨设 y=0y=0y=0y=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(xy=0)=(2π)2nΣ211exp(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(xy=1)=(2π)2nΣ211exp(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=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=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=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 的时候我们可以将 mmm 个样本分为 y=0y=0y=0y=1y=1y=1 两类。另外,我们设 y=1y=1y=1 的类共包含 kkk 个样本,那么显然 y=0y=0y=0 的类就包含 m−km-kmk 个样本(变量 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ϕ+(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=1y=1y=1 的类别的数目占总样本数的比例。接着,我们给出 y=0y=0y=0 类的 μ0\mu_0μ0 的最大似然求解过程( μ1\mu_1μ1 计算方法类似,从略),其中利用了一个矩阵求导公式 ∂xTAx∂A=2Ax\frac{\partial x^TAx}{\partial A}=2AxAxTAx=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μ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=0y=0y=0 的样本进行了求均值的计算。最后是 Σ\SigmaΣ 的最大似然计算,在计算开始前,先给出一个将会用到的矩阵求导公式:∂uAv∂A=uvT\frac{\partial u A v}{\partial A}=u v^TAuAv=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[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

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

ϕ=1m∑i=1m1{y(i)=1}\large \phi=\frac{1}{m}\sum_{i=1}^m\mathbb{1}\{y^{(i)}=1\}ϕ=m1i=1m1{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=1m1{y(i)=0}i=1m1{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=1m1{y(i)=1}i=1m1{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Σ=m1i=1m(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=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

注意到 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=1x)=1+expwTx

(μ1Tμ0T)Σ1x+bias

21(logϕ1ϕ+μ1TΣ1μ1μ0TΣ1μ0)
1=1+eθTx1

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

实际上,可以证明,只要我们取的似然函数 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)与垃圾邮件分类

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

词向量

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

这个映射方式十分简单方便,但却并不能体现各个单词之间的关系。在神经网络训练中我们往往会用预训练的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,,x50000y)=P(x1y)P(x2y)P(x50000y)=i=150000P(xiy)

举一个例子,假设某封邮件中出现了 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=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=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,ϕjy=1,ϕjy=0)=i=1mP(x(i),y(i))

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

ϕy=∑i=1m1{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=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\}}ϕjy=1=i=1m1{y(i)=1}i=1m1{y(i)=1xj(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\}}ϕjy=0=i=1m1{y(i)=0}i=1m1{y(i)=0xj(i)=1}

可以看出,ϕj∣y=1\phi_{j|y=1}ϕjy=1 的最大似然估计就等于训练样本中是垃圾邮件且出现了单词 xjx_jxj 的样本数量占总垃圾邮件的百分比。于是,利用最大似然估计作为概率 P(xj∣y)=ϕj∣yP(x_j|y)=\phi_{j|y}P(xjy)=ϕjy,以及 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(x2000y=1)=ϕ2000y=1=0,P(x2000y=0)=ϕ2000y=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=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%。有一个方法技能避免 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}ϕjy=1=i=1m1{y(i)=1}+2i=1m1{y(i)=1xj(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}ϕ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,后续就不会出现 00\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

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

  1. 基于朴素贝叶斯的文本分类算法

    基于朴素贝叶斯的文本分类算法 摘要:常用的文本分类方法有支持向量机.K-近邻算法和朴素贝叶斯.其中朴素贝叶斯具有容易实现,运行速度快的特点,被广泛使用.本文详细介绍了朴素贝叶斯的基本原理,讨论多项式模 ...

  2. 朴素贝叶斯基于朴素贝叶斯的文本分类算法

    朴素贝叶斯 以及 基于朴素贝叶斯的文本分类算法 参考文章: https://www.cnblogs.com/jorbin/articles/1915888.html

  3. 朴素贝叶斯文本分类java_基于朴素贝叶斯的文本分类算法

    基于朴素贝叶斯的文本分类算法 摘要:常用的文本分类方法有支持向量机.K-近邻算法和朴素贝叶斯.其中朴素贝叶斯具有容易实现,运行速度快的特点,被广泛使用.本文详细介绍了朴素贝叶斯的基本原理,讨论多项式模 ...

  4. python文本分类算法_python编写朴素贝叶斯用于文本分类

    朴素贝叶斯估计 朴素贝叶斯是基于贝叶斯定理与特征条件独立分布假设的分类方法.首先根据特征条件独立的假设学习输入/输出的联合概率分布,然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出 ...

  5. 《机器学习实战》学习总结(三)朴素贝叶斯在文本分类的应用

    概述 本文采用的是词集模型. 词集模型:将每个单词出现与否作为一个特征,即忽略了单词出现的次数,从而将句子转化为单词向量后,该向量中只有0和1:对应的是词袋模型,将考虑单词出现的次数,从而得到的单词向 ...

  6. 朴素贝叶斯Naïve Bayes分类算法在Hadoop上的实现

    1. Naïve Bayes算法介绍 Naïve Bayes是一个简单有效的分类算法,已经得到广泛使用.本文讨论了海量数据(TB级)下Naïve Bayes算法的实现方法,并给出了Hadoop上的实现 ...

  7. 【朴素贝叶斯学习记录】西瓜书数据集朴素贝叶斯实现

    朴素贝叶斯学习记录2 本文主要根据西瓜书的朴素贝叶斯公式推导以及例题解答为基础进行学习. 该全过程主要解决了以下几个问题: 朴素贝叶斯的数学表达式是如何求得 朴素贝叶斯与贝叶斯的差别在哪里 朴素贝叶斯 ...

  8. Python《机器学习实战》读书笔记(四)——朴素贝叶斯

    第四章 基于概率论的分类方法朴素贝叶斯 4-1 基于贝叶斯决策理论的分类方法 4-2 条件概率 4-3 使用条件概率来分类 4-4 使用朴素贝叶斯进行文档分类 4-5 使用Python进行文本分类 4 ...

  9. k-近邻算法及朴素贝叶斯算法

    目录 一.k-近邻算法的定义 二.k近邻算法实例-预测入住位置 三.k-临近算法优缺点 四.精确率与召回率 1.精确率 2.召回率 3.F1-score 4.classification_report ...

  10. 分类算法之K近邻和朴素贝叶斯

    分类算法之K近邻和朴素贝叶斯 K近邻 一个例子弄懂k-近邻 sklearn k-近邻算法API 朴素贝叶斯 概率论基础 贝叶斯公式 拉普拉斯平滑 sklearn朴素贝叶斯实现API K近邻 一个例子弄 ...

最新文章

  1. Eclipse使用技巧 快捷键
  2. Spring JDBC-使用XML配置声明式事务
  3. springCloud(22):Eureka总结提升
  4. C++中 auto自动变量,命名空间,using作用以及作用域
  5. java奇数偶数数组_在Java数组中将数组中的奇数置后偶数置前(两种不同的方法实现)...
  6. 数据库:后端开发必备的 MySQL日志文件知识点
  7. linux彻底卸载xfce,Ubuntu12.04LTS下如何安装和彻底卸载xfce4?
  8. 燃鹅小助手自动抽奖源码
  9. html5支持哪媒体,html5 支持哪些媒体元素
  10. 我对计算机网络的期待,表白对女朋友说的情话短句 我愿是你最期待的风景线...
  11. 打码(C语言)常见粗心小错误 (前方高能,一定要点)
  12. 32位系统是指地址_不起眼却很重要丨32位操作系统与64位操作系统详解(含查询教程)...
  13. MATLAB中常用的基本数学函数和三角函数
  14. rufus linux 教程,图文回复rufus使用教程【操作步骤】
  15. 什么是API接口?给大家举例说明
  16. linux 动态监控进程
  17. unity小技巧收集总结--自用(三)
  18. 神经网络---预训练
  19. mysql数据迁移与同步常用解决方案总结
  20. 16丨数据分析基础篇答疑

热门文章

  1. 程序员副业开启模式:8个GitHub上可以赚钱的小程序
  2. 我的Android进阶之旅------四种呼叫转移场景
  3. 解决android启动白屏问题
  4. linux 解决安装Nvidia驱动后,或者声音选项里只有HDMI,声卡没有声音的方法[集锦]
  5. android 跳过检查,绕过安卓应用检测项
  6. ubuntu shell命令大全
  7. SWA实战:使用SWA进行微调,提高模型的泛化
  8. MediaPlayer详解和使用
  9. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之计网_Part_1-2(HTTP1.0、1.1、2.0、3.0【谁比谁牛,牛在哪】;HTTP(S)、会话和饼干、权限)整起
  10. 计算组合数 汉诺塔 喵帕斯之天才算数少女 神奇的函数