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

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

  1. 样本输入特征为x∈Rnx∈Rn,其类别y∈{0,1}y∈{0,1};
  2. 样本类别yy服从参数为ϕϕ的伯努力分布,即y∼Bernoulli(ϕ)y∼Bernoulli(ϕ);
  3. 两类样本分别服从不同的高斯分布,即x|y=0∼N(μ0,Σ),x|y=1∼N(μ1,Σ)x|y=0∼N(μ0,Σ),x|y=1∼N(μ1,Σ);

对应的概率分布形式如下:

p(y)=ϕy(1−ϕ)1−y(1)(1)p(y)=ϕy(1−ϕ)1−y
p(x|y=0)=1(2π)n2|Σ|12exp(−12(x−μ0)TΣ−1(x−μ0))(2)(2)p(x|y=0)=1(2π)n2|Σ|12exp⁡(−12(x−μ0)TΣ−1(x−μ0))
p(x|y=1)=1(2π)n2|Σ|12exp(−12(x−μ1)TΣ−1(x−μ1))(3)(3)p(x|y=1)=1(2π)n2|Σ|12exp⁡(−12(x−μ1)TΣ−1(x−μ1))
p(x|y)=1(2π)n2|Σ|12exp(−12(x−μy)TΣ−1(x−μy))(4)(4)p(x|y)=1(2π)n2|Σ|12exp⁡(−12(x−μy)TΣ−1(x−μy))

我们模型的参数包括ϕ,μ0,μ1,Σϕ,μ0,μ1,Σ。这里的两个高斯分布具有不同的均值μ0μ0和μ1μ1,但在实际应用中一般取相同的方差ΣΣ。

给定包含mm个样本的训练集S={(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))}S={(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))},似然函数形式如下:

L(ϕ,μ0,μ1,Σ)=log∏mi=1p(x(i),y(i);ϕ,μ0,μ1,Σ)=log∏mi=1p(x(i)|y(i);μ0,μ1,Σ)p(y(i);ϕ)=∑mi=1logp(x(i)|y(i);μ0,μ1,Σ)+logp(y(i);ϕ)=∑mi=1[−12(x(i)−μy(i))TΣ−1(x(i)−μy(i))−n2log(2π)−12log|Σ−1|+y(i)logϕ+(1−y(i))log(1−ϕ)](5)(5)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,Σ)+log⁡p(y(i);ϕ)=∑i=1m[−12(x(i)−μy(i))TΣ−1(x(i)−μy(i))−n2log⁡(2π)−12log⁡|Σ−1|+y(i)log⁡ϕ+(1−y(i))log⁡(1−ϕ)]

通过最大似然进行参数估计,用似然函数LL对各个参数求偏导:

∂L(ϕ,μ0,μ1,Σ)∂ϕ=∂∂ϕ∑mi=1[y(i)logϕ+(1−y(i))log(1−ϕ)]=∑mi=1y(i)ϕ−1−y(i)1−ϕ=∑mi=1y(i)−ϕϕ(1−ϕ)=0⇒ϕ=∑mi=1y(i)m=∑mi=11{y(i)=1}m(6)(6)∂L(ϕ,μ0,μ1,Σ)∂ϕ=∂∂ϕ∑i=1m[y(i)log⁡ϕ+(1−y(i))log⁡(1−ϕ)]=∑i=1my(i)ϕ−1−y(i)1−ϕ=∑i=1my(i)−ϕϕ(1−ϕ)=0⇒ϕ=∑i=1my(i)m=∑i=1m1{y(i)=1}m
∂L(ϕ,μ0,μ1,Σ)∂μ0=∂∂ϕ∑mi=1[−121{y(i)=0}(x(i)−μ0)TΣ−1(x(i)−μ0)]=∂∂μ0∑mi=1−121{y(i)=0}⋅Tr[μT0Σ−1μ0−μT0Σ−1x(i)−(x(i))TΣ−1μ0]=∑mi=11{y(i)=0}Σ−1(x(i)−μ0)=0⇒μ0=∑mi=11{y(i)=0}x(i)∑mi=11{y(i)=0}(7)(7)∂L(ϕ,μ0,μ1,Σ)∂μ0=∂∂ϕ∑i=1m[−121{y(i)=0}(x(i)−μ0)TΣ−1(x(i)−μ0)]=∂∂μ0∑i=1m−121{y(i)=0}⋅Tr[μ0TΣ−1μ0−μ0TΣ−1x(i)−(x(i))TΣ−1μ0]=∑i=1m1{y(i)=0}Σ−1(x(i)−μ0)=0⇒μ0=∑i=1m1{y(i)=0}x(i)∑i=1m1{y(i)=0}

同理,可得

μ1=∑mi=11{y(i)=1}x(i)∑mi=11{y(i)=1}(8)(8)μ1=∑i=1m1{y(i)=1}x(i)∑i=1m1{y(i)=1}
∂L(ϕ,μ0,μ1,Σ)∂Σ=∂∂Σ[−12(x(i)−μy(i))TΣ−1(x(i)−μy(i))−12log|Σ|]=∑mi=112[(Σ−1(x(i)−μy(i))(x(i)−μy(i))TΣ−1)T−(Σ−1)T]=12∑mi=1(x(i)−μy(i))(x(i)−μy(i))T−Σ=0⇒Σ=1m(x(i)−μy(i))(x(i)−μy(i))T(9)(9)∂L(ϕ,μ0,μ1,Σ)∂Σ=∂∂Σ[−12(x(i)−μy(i))TΣ−1(x(i)−μy(i))−12log⁡|Σ|]=∑i=1m12[(Σ−1(x(i)−μy(i))(x(i)−μy(i))TΣ−1)T−(Σ−1)T]=12∑i=1m(x(i)−μy(i))(x(i)−μy(i))T−Σ=0⇒Σ=1m(x(i)−μy(i))(x(i)−μy(i))T

仔细分析一下估计出的四个参数,我们会发现ϕϕ就是在训练集上统计出的y=1y=1的样本出现的概率,μ0μ0和μ1μ1则分别为两类样本各自的均值,ΣΣ为整个训练集上的样本方差。

有了这些参数,我们怎样进行预测呢?这就很简单了,将各参数带入p(x|y)p(x|y)和p(y)p(y),利用p(x|y)p(y)=p(x,y)p(x|y)p(y)=p(x,y)可导出联合概率,我们取使联合概率p(x,y)p(x,y)最大的类别yy即可

argmaxy∈{0,1}p(x|y)p(y)(10)(10)argmaxy∈{0,1}p(x|y)p(y)

最后,我们来分析高斯判别模型和Logistic回归之间的情缘。如果x|yx|y服从高斯分布N(μ,Σ)N(μ,Σ)(只针对yy取两个离散值的情况),则p(y|x)p(y|x)具有logistic函数的形式;反过来,p(y|x)p(y|x)形式上为logistic函数并不能说明x|y∼N(μ,Σ)x|y∼N(μ,Σ)。实际上,有很多组假设都能使p(y|x)p(y|x)有logistic函数的形式,只要假设满足x|yx|y服从指数族分布(Exponential Family Distribution)。例如,x|y=0∼Poisson(λ0)x|y=0∼Poisson(λ0)和x|y=1∼Poisson(λ1)x|y=1∼Poisson(λ1),则p(y|x)p(y|x)在形式上同样为logistic函数。以高斯判别分析为例,简单证明一下:

====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)exp(−12(x−μ1)TΣ−1(x−μ1))ϕexp(−12(x−μ1)TΣ−1(x−μ1))ϕ+exp(−12(x−μ0)TΣ−1(x−μ0))(1−ϕ)11+exp(12(x−μ1)TΣ−1(x−μ1)−12(x−μ0)TΣ−1(x−μ0))1−ϕϕ11+exp(xTΣ−1(μ0−μ1)+12μT1Σ−1μ1−12μT0Σ−1μ0+log(1−ϕ)−logϕ)(11)(11)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)=exp⁡(−12(x−μ1)TΣ−1(x−μ1))ϕexp⁡(−12(x−μ1)TΣ−1(x−μ1))ϕ+exp⁡(−12(x−μ0)TΣ−1(x−μ0))(1−ϕ)=11+exp⁡(12(x−μ1)TΣ−1(x−μ1)−12(x−μ0)TΣ−1(x−μ0))1−ϕϕ=11+exp⁡(xTΣ−1(μ0−μ1)+12μ1TΣ−1μ1−12μ0TΣ−1μ0+log⁡(1−ϕ)−log⁡ϕ)

高斯判别分析在建模时提出了很强的假设,那就是各个类别的数据服从高斯分布。当建模的假设近似正确时,高斯判别分析对数据的应用更高效,因为模型知道数据服从高斯分布,并且直接获取了高斯分布的均值和方差,因此在数据量较少的情形下能有较好效果。如果数据的实际分布与假设相悖时,效果往往会比较差。Logistic回归做出的模型假设相比之下很弱,因此对模型的假设具有更好的鲁棒性。举个例子,如果数据呈现的不是高斯分布而是Poisson分布,但是我们仍然假设x|yx|y服从高斯分布,这时logistic回归的性能仍然会很好。原因很简单,不管x|yx|y是服从高斯分布还是Poisson分布,p(y=1|x)p(y=1|x)最终都可以简化成logistic函数的形式。但如果我们采用GDA在非高斯分布的数据上用高斯模型拟合,就无法保证能取得较好的结果。在我们不确定x|yx|y的概率分布的情况下,用logistic回归更稳妥,也是基于这个原因,logistic回归实际上用得更多一些。

以下是GDA相关实验的一个小Demo截图和简要说明,实验代码在这里下载。实验中用两个均值不同但方差相同的高斯模型随机生成了400个1维的样本点,其中两类样本之比为3:23:2,而且两类样本见存在重叠;将整个数据集拆分成容量为9:19:1的两部分,前者作为训练集,后者作为测试集。横坐标上的蓝色和绿色点表示两类样本;蓝色和绿色曲线标明了整个训练集属于两类的概率;红色曲线则表明了p(y=1|x)p(y=1|x)的值,从实验角度证明p(y=1|x)p(y=1|x)形式上为logistic函数。在生成下图的这次运行实例中,正确分类率为0.9750.975。

高斯判别分析 Gaussian Discriminant Analysis的更多相关文章

  1. Gaussian discriminant analysis 高斯判别分析

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

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

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

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

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

  4. Gaussian Discriminant Analysis

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

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

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

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

    LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discrimin ...

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

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

  8. 【cs229-Lecture5】生成学习算法:1)高斯判别分析(GDA);2)朴素贝叶斯(NB)

    参考: cs229讲义 机器学习(一):生成学习算法Generative Learning algorithms:http://www.cnblogs.com/zjgtan/archive/2013/ ...

  9. [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- ...

随机推荐

  1. PHP图形图像处理之初识GD库

    d=====( ̄▽ ̄*)b 引语 php不仅仅局限于html的输出,还可以创建和操作各种各样的图像文件,如GIF.PNG.JPEG.WBMP.XBM等. php还可以将图像流直接显示在浏览器中. 要处 ...

  2. ptypes中string类的空间分配

    问题描述:            在学习ptypes中string类的空间分配时,经常使分配的空间超出实际所需的空间 使用的分配函数是:_alloc函数 注:        在_alloc函数中调用了 ...

  3. TEST ON 平安夜

    1.前言 = = 感觉自己其实没发过关于考试的博客过... 今天是一个平安的夜晚,漆黑的夜被霓虹划分成网络,很适合发题. 2.num9九数码问题 传统8数码改一下...只询问一个状态,所以很容易搞,正 ...

  4. 委托、事件和Lambda

    一.委托 delegate1.在.Net平台下,委托类型用来定义和响应应用程序中的回调.事实上,.Net委托类型是一个类型安全的对象,指向可以以后调用的其他方法,.Net委托是内置支持多路广播和异步方 ...

  5. redis提示Could not get a resource from the pool(jedis连接池配置)

    起初在JedisPool中配置了50个活动连接,但是程序还是经常报错:Could not get a resource from the pool 连接池刚开始是这样配置的: JedisPoolCon ...

  6. 使用Visual Studio 2012 开发 Html5 应用

    Visual Studio 一直以来是开发微软旗下应用的利器,只要是开发微软相关的应用无论是Windows程序,WPF,Asp.Net,WinRT Surface,WindowsPhone 等微软旗下 ...

  7. wifidog源码分析 - 用户连接过程

    引言 之前的文章已经描述wifidog大概的一个工作流程,这里我们具体说说wifidog是怎么把一个新用户重定向到认证服务器中的,它又是怎么对一个已认证的用户实行放行操作的.我们已经知道wifidog ...

  8. Tomcat自动启动脚本

    Tomcat自动启动脚本#!/bin/bash # chkconfig: 2345 10 90 # description: Starts and Stops the Tomcat daemon. T ...

  9. Win7无法使用VPN的原因与解决方法(一)

    如果Windows 7不是通过正常安装途径的话,像Ghost错误.系统环境改变等,都有可能导致无法使用VPN,而且由于原因不同,给出的提示也不尽相同.实际上,万变不离其宗, VPN是要依靠Window ...

  10. POJ1811 Prime Test(miller素数判断&&pollar_rho大数分解)

    http://blog.csdn.net/shiyuankongbu/article/details/9202373 发现自己原来的那份模板是有问题的,而且竟然找不出是哪里的问题,所以就用了上面的链接 ...