本文对应的是吴恩达老师的CS229机器学习的第五课。这节课介绍了判别学习算法和生成学习算法,并给出了生成学习算法的一个实例:利用朴素贝叶斯进行垃圾邮件分类。
对于机器学习的任务,可以简单描述为:给定一个输入点 x x x,建立模型求其预测值 h θ ( x ) h_\theta(x) hθ(x)。从贝叶斯学派的角度看,我们的目的就是建模 P ( y ∣ x ) P(y|x) P(y∣x)。那么,由贝叶斯公式,我们显然可以得到两种不同的建模方式:
接下来我们介绍一个生成学习的例子:高斯判别分析。注意,名字虽然是判别,但它是一个生成学习的例子。
根据之前的描述我们知道,生成模型的关键在于对 P ( x ∣ y ) P( \bold{x} |y) P(x∣y) 的建模。对于独立分布的输入以及自然噪声等,高斯模型往往是一个不错的选择。于是,我们假设输入数据分布满足高斯分布,即
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=1∑mxi
Σ \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[(x−E[x])(X−E[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]
我们同样可以在二维平面内用等高线图画出高斯函数,如下图
上图的三个模型均值都为 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} [1−0.5−0.51];[1−0.8−0.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−ϕ)(1−y)(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(x∣y=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(x∣y=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=1∏mP(x(i),y(i);ϕ,μ0,μ1,Σ)=logi=1∏mP(x(i)∣y(i);μ0,μ1,Σ)P(y(i);ϕ)=i=1∑mlogP(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=1∑m=i=1∑mlog((2π)2n∣Σ∣211exp(−21(x(i)−μy(i))TΣ−1(x(i)−μy(i)))ϕy(i)(1−ϕ)(1−y(i)))[−2nlog(2π)−21log∣Σ∣−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 的时候我们可以将 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 m−k 个样本(变量 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ϕ+(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=m1i=1∑m1{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 ∂A∂xTAx=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=∂μ0∂∑i=1m1{y(i)=0}[−21(x(i)−μ0)TΣ−1(x(i)−μ0)]=i=1∑m1{y(i)=0}[−21⋅2(x(i)−μ0)Σ−1⋅(−1)]=i=1∑m1{y(i)=0}(x(i)−μ0)Σ−1=i=1∑m1{y(i)=0}x(i)Σ−1−i=1∑m1{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 ∂A∂uAv=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⋅∂Σ−1∂∑i=1m(x(i)−μy(i))TΣ−1(x(i)−μy(i))⋅∂Σ∂Σ−1=−21i=1∑mΣ−1−21i=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=m1i=1∑m(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=1∑m1{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=1∑m(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=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
注意到 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=1∣x)=1+exp⎝⎜⎜⎛−wTx −(μ1T−μ0T)Σ−1x+bias 21(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) 服从指数族分布。
接下来,简单介绍一个生成模型的实际应用场景:垃圾邮件分类。
首先我们介绍一下词向量。无论中文英文,计算机本质上都是无法识别的,那么我们如何将单词变为计算机可以识别的输入呢?一个很简单的方式就是将是否有某个单词用 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=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡100⋮1⋮0⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤ aaardvarkaardwolf⋮buy⋮zygmurgy
这个映射方式十分简单方便,但却并不能体现各个单词之间的关系。在神经网络训练中我们往往会用预训练的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,⋯,x50000∣y)=P(x1∣y)P(x2∣y)⋯P(x50000∣y)=i=1∏50000P(xi∣y)
举一个例子,假设某封邮件中出现了 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=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 = 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,ϕj∣y=1,ϕj∣y=0)=i=1∏mP(x(i),y(i))
其中 ϕ j ∣ y = 1 \phi_{j|y=1} ϕj∣y=1 表示垃圾邮件中出现单词 x j x_j xj 的概率, ϕ j ∣ y = 0 \phi_{j|y=0} ϕj∣y=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=m∑i=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\}} ϕj∣y=1=∑i=1m1{y(i)=1}∑i=1m1{y(i)=1∧xj(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\}} ϕj∣y=0=∑i=1m1{y(i)=0}∑i=1m1{y(i)=0∧xj(i)=1}
可以看出, ϕ j ∣ y = 1 \phi_{j|y=1} ϕj∣y=1 的最大似然估计就等于训练样本中是垃圾邮件且出现了单词 x j x_j xj 的样本数量占总垃圾邮件的百分比。于是,利用最大似然估计作为概率 P ( x j ∣ y ) = ϕ j ∣ y P(x_j|y)=\phi_{j|y} P(xj∣y)=ϕj∣y,以及 P ( y ) P(y) P(y) 的最大似然估计(前文已证),我们就可以得到我们的朴素贝叶斯模型(类似 ( 4 ) (4) (4) 式),然后我们就可以用它来预测给定邮件是否为垃圾邮件。
但是上述情况会出现一个问题,假设我们所有用于训练的邮件中没有出现单词 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(x2000∣y=1)=ϕ2000∣y=1=0,P(x2000∣y=0)=ϕ2000∣y=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=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%。有一个方法技能避免 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} ϕj∣y=1=∑i=1m1{y(i)=1}+2∑i=1m1{y(i)=1∧xj(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} ϕj∣y=0=∑i=1m1{y(i)=0}+2∑i=1m1{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,后续就不会出现 0 0 \frac{0}{0} 00 这样无意义的解了。
最后,补充说明一下比较常见的判别学习与生成学习方法
常见的判别学习方法有:
常见的生成学习方法有:
常见生成式模型与判别式模型: https://www.cnblogs.com/zoe1101/p/10659255.html