引言

前面几讲,我们主要探讨了如何对 p(y|x;θ) (即y 相对于x的条件概率)进行建模的几种学习算法,比如,logistic regression 对 p(y|x;θ) 进行建模的假设函数为 hθ(x)=g(θTx), 其中函数 g 为 sigmoid 函数。这一讲我们要讨论另外一类完全不同的学习算法。

在介绍这类算法之前,我们先来看一个简单的分类问题,比如我们想要设计一个算法区分大象(y=1)和狗(y=0)。基于这两种动物的某些特征,前面介绍的算法比如 logistic regression 会试着在这两类样本之间找到一条直线,这条直线可以称之为决策边界,用来区分大象和狗,对于一个新来的测试样本,可以根据该样本落在决策边界的哪一边来决定新输入的测试样本是大象还是狗。

我们还可以从另外一个角度考虑,我们不去寻找这样一条决策边界,我们可以尝试建立一个模型分别描述这两种动物,因为狗有狗的样子,大象有大象的样子,如果建立的模型可以精确地描述这两类动物,并且将彼此之间的不同点区分开来,那么对于新输入的测试样本,我们可以看测试样本与哪类动物的描述更加接近,进而可以判断与某类动物的描述越接近,则该测试样本属于该类的概率就越大。

通常,直接求y 相对于x的条件概率即 p(y|x;θ) 的算法 (比如 logistic regression),或者直接将输入变量映射到输出值的算法 (比如感知器,神经网络一类) , 这些都称为 discriminative 学习算法,而这一讲,我们介绍的算法是求 p(x|y) 和 p(y),这些算法我们称为 generative学习算法。例如,如果 y 表示一个样本是狗(0)或者大象(1),那么 p(x|y=0) 给出的是狗这一类的特征分布,p(x|y=1) 给出的是大象这一类的特征分布。

一旦得到了 p(y) (也称为先验概率)和 p(x|y),利用贝叶斯准则,可以算出 y 相对于 x 的后验概率:

p(y|x)=p(x|y)p(y)p(x)

其中,p(x) = p(x|y = 1)p(y = 1) + p(x|y =0)p(y = 0), 因此,上式可以完全用 p(x|y) 和 p(y) 来表示,事实上,如果用 p(y|x)来做预测的话,不用算出 p(x)的具体值,因为该式子满足如下关系:

argmaxyp(y|x)=argmaxyp(x|y)p(y)p(x)=argmaxyp(x|y)p(y)

所以,只要有 p(x|y) 和 p(y) 就足够了。

Gaussian discriminant analysis

我们介绍的第一个 generative 学习算法是Gaussian discriminant analysis (GDA). 这里我们将假设 p(x|y) 服从多元正态分布,在介绍Gaussian discriminant analysis (GDA) 之前,我们先简要讨论一下多元正态分布的特性。

The multivariate normal distribution

n 维空间的多元正态分布,也叫多元高斯分布,可以由均值向量(mean vector) μ∈R2和协方差矩阵(covariance matrix)

Σ∈Rn 描述,其中 Σ⩾0 是对称并且半正定的,该分布可以简写为 N(μ,Σ),其概率密度为:

p(x;μ,Σ)=1(2π)n/2|Σ|1/2exp(−12(x−μ)TΣ(x−μ))

其中, |Σ| 表示矩阵 Σ 的 determinant.

对于一个服从 N(μ,Σ) 分布的随机变量X, 它的期望值为μ,即:

E[X]=∫xxp(x;μ,Σ)dx=μ

高维随机变量的协方差定义为:Cov(Z)=E[(Z−E(Z))(Z−E(Z))T].该式子可以进一步简化为:Cov(Z)=E[ZZT]−(E[Z])(E[Z]T). 如果 X∼N(μ,Σ),那么,

Cov(X)=Σ

The Gaussian Discriminant Analysis model

在分类问题中,如果输入的是连续的随机变量,那么我们可以用 Gaussian Discriminant Analysis (GDA) 模型,利用多元正态分布来描述 p(x|y), 该模型可以表示如下:

y∼Bernoulli(ϕ)
x|y=0∼N(μ0,Σ)
x|y=1∼N(μ1,Σ)

其概率密度为:

p(y)p(x|y=0)p(x|y=1)=ϕy(1−ϕ)1−y=1(2π)n/2|Σ|1/2exp(−12(x−μ0)TΣ(x−μ0))=1(2π)n/2|Σ|1/2exp(−12(x−μ1)TΣ(x−μ1))

其中,我们要估计得参数有 ϕ, μ0, μ1 和 Σ (请注意:虽然这里有两个不同的期望值,但是对于同一组训练样本,该模型通常只用一个

协方差矩阵)。 该模型的 log-likelihood 是:

l(ϕ,μ0,μ1,Σ)=log∏i=1np(x(i),y(i);ϕ,μ0,μ1,Σ)=log∏i=1np(x(i)|y(i);ϕ,μ0,μ1,Σ)p(y(i);ϕ)

进一步,我们利用最大似然估计,可以得到这些参数的最大似然估计值:

ϕμ0μ1Σ=1m∑i=1m1{y(i)=1}=∑mi=11{y(i)=0}x(i)∑mi=11{y(i)=0}=∑mi=11{y(i)=1}x(i)∑mi=11{y(i)=1}=1m∑i=1m(x(i)−μy(i))(x(i)−μy(i))T

一旦得到这些参数,那么给定一个新的测试样本,我们可以利用这些参数算出 p(x|y=0) 和 p(x|y=1),测试样本属于概率大的哪一类。

GDA and logistic regression

GDA模型与 logistic regression 之间存在着有趣的联系,如果我们将条件概率 p(y=1|x;ϕ,μ0,μ1,Σ) 看成是关于 x 的函数,那么该条件概率可以表示成:

p(y=1|x;ϕ,μ0,μ1,Σ)=11+exp(−θTx)

其中 θ 是变量 ϕ,μ0,μ1,Σ 的函数。很显然,GDA 是 generative 学习算法,而 logistic regression 是 discriminative 学习算法,一般来说,对于同一组训练样本,两种学习算法给出的决策边界是不同的。那么,这两种方法应该如何选择呢?

我们可以看到,如果p(x|y)是多元高斯分布,那么p(y|x)是满足logistic 函数关系的,但是反过来不一定成立,即p(y|x)如果是logistic 函数,p(x|y)不一定是多元高斯分布。这意味着,GDA 给出的假设比logistic regression 要更强,如果假设是正确的(比如数据确实符合多元高斯分布),那么 GDA 会给出更好的拟合模型和结果。特别地,如果 p(x|y) 确实满足多元高斯分布,那么GDA是 asymptotically efficient。 这意味着,如果训练样本非常多的时候,严格意义上来说,GDA 给出的预测结果应该是最好的,其他的算法很难超越它(取决于对 p(y|x)的估计有多准确),这种情况下,GDA的表现应该比logistic regression 更好。

相反,logistic regression 给出的假设相对较弱,所以logistic regression 更加稳健,对模型的假设有更大的容错性,很多不同的数据分布的假设最终可以用logistic函数表示,比如前面提到的泊松分布,如x|y=0∼Possion(λ0), x|y=1∼Possion(λ1), 那么p(y|x)将是一个logistic function, logistic regression 对于服从泊松分布的数据可以很好的拟合,如果用GDA进行拟合,也就是说用高斯模型来拟合非高斯分布的数据,这个结果可能很好也可能很糟。

总而言之,GDA给出的是更强的假设,当数据分布接近高斯分布时,一般来说GDA会更加高效,可以用较少的数据训练出性能不错的模型。而logistic regression给出的是相对较弱的假设,但是对不同的数据分布有更稳健的包容性。具体来说,当数据分布不服从高斯分布的,logistic regression 的表现几乎总是优于GDA,所以在实际的应用中,logistic regression 比GDA要用得更加广泛。

参考文献

Andrew Ng, “Machine Learning”, Stanford University.

机器学习 Generative Learning Algorithm (A)的更多相关文章

  1. 机器学习 Generative Learning Algorithm (B)

    Naive Bayes 在GDA模型中,特征向量x是连续的实数向量,在这一讲里,我们将要讨论另外一种算法用来处理特征向量x是离散值的情况. 我们先考虑一个例子,用机器学习的方法建立一个垃圾邮件过滤器, ...

  2. 生成学习算法(Generative Learning algorithms)

    一.引言 前面我们谈论到的算法都是在给定\(x\)的情况下直接对\(p(y|x;\theta)\)进行建模.例如,逻辑回归利用\(h_\theta(x)=g(\theta^T x)\)对\(p(y|x ...

  3. Andrew Ng机器学习公开课笔记 -- Generative Learning algorithms

    网易公开课,第5课 notes,http://cs229.stanford.edu/notes/cs229-notes2.pdf 学习算法有两种,一种是前面一直看到的,直接对p(y|x; θ)进行建模 ...

  4. 【Perceptron Learning Algorithm】林轩田机器学习基石

    直接跳过第一讲.从第二讲Perceptron开始,记录这一讲中几个印象深的点: 1. 之前自己的直觉一直对这种图理解的不好,老按照x.y去理解. a) 这种图的每个坐标代表的是features:fea ...

  5. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

  6. 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

  7. 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)

    ##机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)---#####注:机器学习资料[篇目一](https://github.co ...

  8. 微软推 Azure 机器学习工具:Algorithm Cheat Sheet

    微软推 Azure 机器学习工具:Algorithm Cheat Sheet [日期:2015-05-15] 来源:CSDN  作者:Linux [字体:大 中 小]   Azure Machine ...

  9. 机器学习(Machine Learning)&amp;深度学习(Deep Learning)资料

    机器学习(Machine Learning)&深度学习(Deep Learning)资料 機器學習.深度學習方面不錯的資料,轉載. 原作:https://github.com/ty4z2008 ...

随机推荐

  1. Latex中參考文献排序

    \bibliographystyle{unsrt}:依照引用的先后排序 \bibliographystyle{plain}:按字母的顺序排列,比較次序为作者.年度和标题.当中作者中姓氏字母优先. 关于 ...

  2. (转)linux设备驱动之USB数据传输分析 一

    三:传输过程的实现说到传输过程,我们必须要从URB开始说起,这个结构的就好比是网络子系统中的skb,好比是I/O中的bio.USB系统的信息传输就是打成URB结构,然后再过行传送的.URB的全称叫US ...

  3. SQLServer判断一个IP是否在一个IP段里

    declare @ip1 varchar(20)declare @ip2 varchar(20)set @ip1='221.231.138.101'set @ip2='255.255.255.255' ...

  4. 使用微软官方U盘制作软件来安装纯净版windows

    第一步:下载一个制作U启的工具;windows-usb-dvd-download-tool 微软官网:https://www.microsoft.com/en-us/download/windows- ...

  5. MyEclipse2014新增bug,尝鲜的朋友需注意NotFoundException: org.springframework.web.context.ContextLoaderListener

    事实上标题后面加上这个异常信息并不合适,可是为了方便和我遇到相同问题的童鞋搜到这篇文章.我不得不这样写啦. 这个异常和你的程序没有关系,假设你没有忘记增加spring Jar包的话,这是fucking ...

  6. Adam 算法

    简介 Adam 是一种可以替代传统随机梯度下降(SGD)过程的一阶优化算法,它能基于训练数据迭代地更新神经网络权重.Adam 最开始是由 OpenAI 的 Diederik Kingma 和多伦多大学 ...

  7. 2014阿里实习生面试题——MySQL如何实现索引的

    这是2014阿里实习生北京站二面的一道试题: 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,比如MyISAM和InnoDB存储引擎. MyISAM索引实现: MyI ...

  8. 每天一个Linux命令(3)mkdir命令

        mkdir命令用来创建目录.    (1)用法:  用法: mkdir [选项]... 目录... (2)功能: 功能: 若指定目录不存在则创建目录 该命令创建由dirname命名的目录.如果 ...

  9. 0424 collections模块、time模块、rondom模块、sys模块

    昨日回顾:hashlib 摘要 md5 sha系列 文件的一致性校验 密文的认证 logging 记录日志 两种用法 basicConfig不常用 getLogger()常用 可以通过一个参数去控制全 ...

  10. Spiral Matrix螺旋遍历矩阵

    假定有: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 这样一个数组矩阵,现要求对其进行顺时针方向螺旋形从外至内地遍历,即输出: [1,2,3,6,9,8,7,4 ...