如果在我们的分类问题中,输入特征$x$是连续型随机变量,高斯判别模型(Gaussian Discriminant Analysis,GDA)就可以派上用场了。
以二分类问题为例进行说明,模型建立如下:
对应的概率分布形式如下:
\begin{equation}
p(y)=\phi^y(1-\phi)^{1-y}
\end{equation}
\begin{equation}
p(x|y=0)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}\exp(-\frac{1}{2}(x-\mu_0)^T\Sigma^{-1}(x-\mu_0))
\end{equation}
\begin{equation}
p(x|y=1)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}\exp(-\frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1))
\end{equation}
\begin{equation}
p(x|y)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}\exp(-\frac{1}{2}(x-\mu_y)^T\Sigma^{-1}(x-\mu_y))
\end{equation}
我们模型的参数包括\(\phi,\mu_0,\mu_1,\Sigma\)。这里的两个高斯分布具有不同的均值\(\mu_0\)和\(\mu_1\),但在实际应用中一般取相同的方差\(\Sigma\)。
给定包含\(m\)个样本的训练集\(\mathcal{S}=\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\cdots,(x^{(m)},y^{(m)})\}\),似然函数形式如下:
\begin{equation}
\begin{array}{ll}
&\quad\mathcal{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)+\log p(y^{(i)};\phi)\\
&=\sum_{i=1}^m\left[-\frac{1}{2}(x^{(i)}-\mu_{y^{(i)}})^T\Sigma^{-1}(x^{(i)}-\mu_{y^{(i)}})\right.\\
&\quad\left.-\frac{n}{2}\log(2\pi)-\frac{1}{2}\log|\Sigma^{-1}|+y^{(i)}\log\phi\right.\\
&\quad\left.+(1-y^{(i)})\log(1-\phi)\right]
\end{array}
\end{equation}
通过最大似然进行参数估计,用似然函数\(\mathcal{L}\)对各个参数求偏导:
\begin{equation}
\begin{array}{ll}
&\quad\frac{\partial\mathcal{L}(\phi,\mu_0,\mu_1,\Sigma)}{\partial\phi}\\
&=\frac{\partial}{\partial\phi}\sum_{i=1}^m\left[y^{(i)}\log\phi+(1-y^{(i)})\log(1-\phi)\right]\\
&=\sum_{i=1}^m\frac{y^{(i)}}{\phi}-\frac{1-y^{(i)}}{1-\phi}\\
&=\sum_{i=1}^m\frac{y^{(i)}-\phi}{\phi(1-\phi)}=0\\
&\Rightarrow \phi=\frac{\sum_{i=1}^my^{(i)}}{m}=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}}{m}
\end{array}
\end{equation}
\begin{equation}
\begin{array}{ll}
&\quad\frac{\partial\mathcal{L}(\phi,\mu_0,\mu_1,\Sigma)}{\partial\mu_0}\\
&=\frac{\partial}{\partial\phi}\sum_{i=1}^m\left[-\frac{1}{2}1\{y^{(i)}=0\}(x^{(i)}-\mu_{0})^T\Sigma^{-1}(x^{(i)}-\mu_{0})\right]\\
&=\frac{\partial}{\partial\mu_0}\sum_{i=1}^m-\frac{1}{2}1\{y^{(i)}=0\}\\
&\quad\cdot Tr[\mu_0^T\Sigma^{-1}\mu_0-\mu_0^T\Sigma^{-1}x^{(i)}-(x^{(i)})^T\Sigma^{-1}\mu_0]\\
&=\sum_{i=1}^m1\{y^{(i)}=0\}\Sigma^{-1}(x^{(i)}-\mu_0)=0\\
&\Rightarrow \mu_0=\frac{\sum_{i=1}^m1\{y^{(i)}=0\}x^{(i)}}{\sum_{i=1}^m1\{y^{(i)}=0\}}
\end{array}
\end{equation}
同理,可得
\begin{equation}
\mu_1=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}x^{(i)}}{\sum_{i=1}^m1\{y^{(i)}=1\}}
\end{equation}
\begin{equation}
\begin{array}{ll}
&\quad\frac{\partial\mathcal{L}(\phi,\mu_0,\mu_1,\Sigma)}{\partial\Sigma}\\
&=\frac{\partial}{\partial\Sigma}[-\frac{1}{2}(x^{(i)}-\mu_{y^{(i)}})^T\Sigma^{-1}(x^{(i)}-\mu_{y{(i)}})-\frac{1}{2}\log|\Sigma|]\\
&=\sum_{i=1}^m\frac{1}{2}[\left(\Sigma^{-1}(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T\Sigma^{-1}\right)^T-(\Sigma^{-1})^T]\\
&=\frac{1}{2}\sum_{i=1}^m(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T-\Sigma=0\\
&\Rightarrow \Sigma=\frac{1}{m}(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T
\end{array}
\end{equation}
仔细分析一下估计出的四个参数,我们会发现$\phi$就是在训练集上统计出的\(y=1\)的样本出现的概率,\(\mu_0\)和\(\mu_1\)则分别为两类样本各自的均值,\(\Sigma\)为整个训练集上的样本方差。
有了这些参数,我们怎样进行预测呢?这就很简单了,将各参数带入\(p(x|y)\)和\(p(y)\),利用\(p(x|y)p(y)=p(x,y)\)可导出联合概率,我们取使联合概率\(p(x,y)\)最大的类别\(y\)即可
\begin{equation}
\underset{y\in\{0,1\}}{arg\max}{\;p(x|y)p(y)}
\end{equation}
最后,我们来分析高斯判别模型和Logistic回归之间的情缘。如果\(x|y\)服从高斯分布\(\mathcal{N}(\mu,\Sigma)\)(只针对\(y\)取两个离散值的情况),则\(p(y|x)\)具有logistic函数的形式;反过来,\(p(y|x)\)形式上为logistic函数并不能说明\(x|y\sim\mathcal{N}(\mu,\Sigma)\)。实际上,有很多组假设都能使\(p(y|x)\)有logistic函数的形式,只要假设满足\(x|y\)服从指数族分布(Exponential Family Distribution)。例如,\(x|y=0\sim Poisson(\lambda_0)\)和\(x|y=1\sim Poisson(\lambda_1)\),则\(p(y|x)\)在形式上同样为logistic函数。以高斯判别分析为例,简单证明一下:
\begin{equation}
\begin{array}{ll}
&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{\exp\left(-\frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1)\right)\phi}{\exp\left(-\frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1)\right)\phi+\exp\left(-\frac{1}{2}(x-\mu_0)^T\Sigma^{-1}(x-\mu_0)\right)(1-\phi)}\\
=&\frac{1}{1+\exp\left(\frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1)-\frac{1}{2}(x-\mu_0)^T\Sigma^{-1}(x-\mu_0)\right)\frac{1-\phi}{\phi}}\\
=&\frac{1}{1+\exp\left(x^T\Sigma^{-1}(\mu_0-\mu_1)+\frac{1}{2}\mu_1^T\Sigma^{-1}\mu_1-\frac{1}{2}\mu_0^T\Sigma^{-1}\mu_0+\log(1-\phi)-\log\phi\right)}
\end{array}
\end{equation}
高斯判别分析在建模时提出了很强的假设,那就是各个类别的数据服从高斯分布。当建模的假设近似正确时,高斯判别分析对数据的应用更高效,因为模型知道数据服从高斯分布,并且直接获取了高斯分布的均值和方差,因此在数据量较少的情形下能有较好效果。如果数据的实际分布与假设相悖时,效果往往会比较差。Logistic回归做出的模型假设相比之下很弱,因此对模型的假设具有更好的鲁棒性。举个例子,如果数据呈现的不是高斯分布而是Poisson分布,但是我们仍然假设\(x|y\)服从高斯分布,这时logistic回归的性能仍然会很好。原因很简单,不管\(x|y\)是服从高斯分布还是Poisson分布,\(p(y=1|x)\)最终都可以简化成logistic函数的形式。但如果我们采用GDA在非高斯分布的数据上用高斯模型拟合,就无法保证能取得较好的结果。在我们不确定\(x|y\)的概率分布的情况下,用logistic回归更稳妥,也是基于这个原因,logistic回归实际上用得更多一些。
以下是GDA相关实验的一个小Demo截图和简要说明,实验代码在这里下载。实验中用两个均值不同但方差相同的高斯模型随机生成了400个1维的样本点,其中两类样本之比为\(3:2\),而且两类样本见存在重叠;将整个数据集拆分成容量为\(9:1\)的两部分,前者作为训练集,后者作为测试集。横坐标上的蓝色和绿色点表示两类样本;蓝色和绿色曲线标明了整个训练集属于两类的概率;红色曲线则表明了\(p(y=1|x)\)的值,从实验角度证明\(p(y=1|x)\)形式上为logistic函数。在生成下图的这次运行实例中,正确分类率为\(0.975\)。