如果在我们的分类问题中,输入特征$x$是连续型随机变量,高斯判别模型(Gaussian Discriminant Analysis,GDA)就可以派上用场了。

以二分类问题为例进行说明,模型建立如下:

  1. 样本输入特征为\(x\in\mathbb{R}^n\),其类别\(y\in\{0,1\}\);
  2. 样本类别\(y\)服从参数为\(\phi\)的伯努力分布,即\(y\sim Bernoulli(\phi)\);
  3. 两类样本分别服从不同的高斯分布,即\(x|y=0\sim\mathcal{N}(\mu_0,\Sigma),x|y=1\sim\mathcal{N}(\mu_1,\Sigma)\);

对应的概率分布形式如下:
\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\)。

Gaussian Discriminant Analysis的更多相关文章

  1. 高斯判别分析 Gaussian Discriminant Analysis

    如果在我们的分类问题中,输入特征xx是连续型随机变量,高斯判别模型(Gaussian Discriminant Analysis,GDA)就可以派上用场了. 以二分类问题为例进行说明,模型建立如下: ...

  2. Gaussian discriminant analysis 高斯判别分析

    高斯判别分析(附Matlab实现) 生成学习算法 高斯判别分析(Gaussian Discriminant analysis,GDA),与之前的线性回归和Logistic回归从方法上讲有很大的不同,G ...

  3. 高斯判别分析模型( Gaussian discriminant analysis)及Python实现

    高斯判别分析模型( Gaussian discriminant analysis)及Python实现 http://www.cnblogs.com/sumai 1.模型 高斯判别分析模型是一种生成模型 ...

  4. 生成式学习算法(三)之----高斯判别分析模型(Gaussian Discriminant Analysis ,GDA)

    高斯判别分析模型(Gaussian Discriminant Analysis ,GDA) 当我们分类问题的输入特征$x $为连续值随机变量时,可以用高斯判别分析模型(Gaussian Discrim ...

  5. 机器学习理论基础学习3.4--- Linear classification 线性分类之Gaussian Discriminant Analysis高斯判别模型

    一.什么是高斯判别模型? 二.怎么求解参数?

  6. [Scikit-learn] 1.2 Dimensionality reduction - Linear and Quadratic Discriminant Analysis

    Ref: http://scikit-learn.org/stable/modules/lda_qda.html Ref: http://bluewhale.cc/2016-04-10/linear- ...

  7. 线性判别分析(Linear Discriminant Analysis,LDA)

    一.LDA的基本思想 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD) ...

  8. OpenCV LDA(Linnear Discriminant analysis)类的使用---OpenCV LDA演示样例

    1.OpenCV中LDA类的声明 //contrib.hpp class CV_EXPORTS LDA { public: // Initializes a LDA with num_componen ...

  9. 线性判别分析(Linear Discriminant Analysis, LDA)算法分析

    原文来自:http://blog.csdn.net/xiazhaoqiang/article/details/6585537 LDA算法入门 一. LDA算法概述:       线性判别式分析(Lin ...

随机推荐

  1. 设计模式:Observer(观察者)—— Guava EventBus

    本文分为三个部分:   Observer(观察者) Guava EventBus详解 Guava EventBus使用示例   1. Observer(观察者)   1.1 背景   我们设计系统时, ...

  2. angularjs filter 详解

    系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter.如果对smarty比较熟悉的话,学习angularjs会比较容易一点.这 ...

  3. Uva 10480 Sabotage 最大流

    表示自从学了网络流,就基本上是一直用dinic 这个题一看就是用最大流,作为常识,两个点之间的最大流等于最小割 但是这个题需要输出割边,然后我就不会了,dinic判流量我觉得也可做,但是一直wa 然后 ...

  4. 《零成本实现Web自动化测试--基于Selenium》 第五章 Selenium-RC

    一. 简介 Selenium-RC可以适应更复杂的自动化测试需求,而不仅仅是简单的浏览器操作和线性执行.Selenium-RC能够充分利用编程语言来构建更复杂的自动化测试案例,例如读写文件.查询数据库 ...

  5. Jquery 操作xml 文档的方法

    需求: 页面上有两个下拉框,显示游戏大区 和游戏服务器,当游戏大区改变时,游戏服务器也跟着改变 界面部分html代码 <tr class="tkSigUser"> &l ...

  6. 第一章 :绪论-Twitter数据的收集和处理

    为什么要用twitter,我心里是一万头CNM在飞奔.这个国外的东西很不好访问到的,国内的政策,你懂的,不说这个了,还是想办法翻出去再说吧. 不知道别人都用的什么工具,看到太多的注册就头大,就选了一个 ...

  7. POJ 2955 Brackets 区间合并

    输出一个串里面能匹配的括号数 状态转移方程: if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')             dp ...

  8. uva 11995 I Can Guess the Data Structure stack,queue,priority_queue

    题意:给你n个操做,判断是那种数据结构. #include<iostream> #include<cstdio> #include<cstdlib> #includ ...

  9. Java学习笔记(1)

    封装基本原则之一: 将实例变量标记为private,将getters与setters标记为public,用setters来检查参数并判断是否可以执行: 局部变量与实例变量的区别: 你无需初始实例变量, ...

  10. 中断——中断描述符表的定义和初始化(一) (基于3.16-rc4)

    1.中断描述符表的定义(arch/x86/kernel/traps.c) gate_desc debug_idt_table[NR_VECTORS] __page_aligned_bss; 定义的描述 ...