生成模型和判别模型的对比

1 前言

监督学习就是学习一个模型(或得到一个目标函数),再用这个模型,对给定的数据进行预测。
这个模型的一般形式为一个决策函数Y=f(X),或者条件概率分布P(Y|X)。

决策函数Y=f(X):输入一个X,它就输出一个Y,这个Y与一个阈值比较,根据比较结果判定X属于哪个类别。例如两类(w1和w2)分类问题,如果Y大于阈值,X就属于类w1,如果小于阈值就属于类w2。这样就得到了X的类别。

条件概率分布P(Y|X):输入一个X,它通过比较它属于所有类的概率,然后输出概率最大的那个作为X的类别。例如:如果P(w1|X)大于P(w2|X),那么就认为X是属于w1类的。

两个模型都能实现对给定的输入X预测相应的类别Y的功能。
实际上通过条件概率分布P(Y|X)进行预测也是隐含着表达成决策函数Y=f(X)的形式的。
而同样,实际上决策函数Y=f(X)也是隐含着使用P(Y|X)的。
因为一般决策函数Y=f(X)是通过学习算法使预测和训练数据之间的误差平方最小化,而贝叶斯告诉我们,虽然它没有显式的运用贝叶斯或者以某种形式计算概率,但它实际上也是在隐含的输出极大似然假设(MAP假设)。也就是说学习器的任务是在所有假设模型有相等的先验概率条件下,输出极大似然假设。

两个模型都能实现对给定的输入X预测相应的类别Y的功能。
实际上,通过条件概率分布P(Y|X)进行预测隐含着表达成决策函数Y=f(X)的形式的。例如两类w1和w2,如果我们求得了P(w1|X)和P(w2|X),那么实际上判别函数就可以表示为Y= P(w1|X)/P(w2|X),如果Y大于1或者某个阈值,那么X就属于类w1,如果小于阈值就属于类w2。
而同样,决策函数Y=f(X)也隐含着使用P(Y|X)的。因为一般决策函数Y=f(X)是通过学习算法使预测和训练数据之间的误差平方最小化,而贝叶斯告诉我们,虽然它没有显式的运用贝叶斯或者以某种形式计算概率,但它实际上也是在隐含的输出极大似然假设(MAP假设)。也就是说学习器的任务是在所有假设模型有相等的先验概率条件下,输出极大似然假设。

所以分类器的设计是在给定训练数据的基础上估计其概率模型P(Y|X)。如果可以估计出来,那么就可以分类。但一般来说,概率模型是比较难估计的。给一堆数,特别是数不多的时候,很难找到这些数满足的规律。

那能否不依赖概率模型直接设计分类器呢?事实上,分类器就是一个决策函数(或决策面),如果能够从要解决的问题和训练样本出发直接求出判别函数,就不用估计概率模型了,这就是决策函数Y=f(X)的任务。例如支持向量机,当已经知道它的决策函数(分类面)是线性时(也就是可以表示成Y=f(X)=WX+b的形式),那么通过训练样本来学习得到W和b的值就可以得到Y=f(X)了。
还有一种更直接的分类方法,不用事先设计分类器,而只是确定分类原则,根据已知样本(训练样本)直接对未知样本进行分类。包括近邻法,它不会在进行具体的预测之前求出概率模型P(Y|X)或者决策函数Y=f(X),而是在真正预测的时候,将X与训练数据的各类的Xi比较,和哪些比较相似,就判断它X也属于Xi对应的类。

2 概述

监督学习方法可以分为生成方法(generative approach)和判别方法(discriminative approach)。所学到的模型分别为生成模型(generative model)和判别模型(discriminative model)。

判别方法:由数据直接学习决策函数Y=f(X)或者条件概率(后验概率)分布P(Y|X)作为预测的模型,即判别模型。基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。
典型的判别模型: k近邻法、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、boosting方法和条件随机场等。判别模型利用正负例和分类标签,关注在判别模型的边缘分布。

建模流程为:有限样本 => 判别函数 = 预测模型 => 预测

生成方法:由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。基本思想是首先建立样本的联合概率密度模型P(X,Y),然后再得到后验概率P(Y|X),再利用它进行分类,就像上面说的那样。
注意:这里是先求出P(X,Y)再得到P(Y|X)的,而且这个过程中还得先求出P(X)。P(X)是训练数据的概率分布。当数据样本非常多的时候,得到的P(X)才能很好的描述数据真正的分布。

建模流程为:无穷样本 => 概率密度模型 = 产生模型 => 预测

还有一个问题是,机器学习领域有个约定俗成的说法:不要去学那些对这个任务没用的东西。例如,对于一个分类任务:对一个给定的输入x,将它划分到一个类y中。那么,如果我们用生成模型:p(x,y)=p(y|x)×p(x)

那就需要去对p(x)建模,这增加了工作量。而且因为数据的稀疏性,导致人们都是被强迫地用弱独立性假设去对p(x)建模,产生了局限性,所以人们更趋向于直观的使用判别模型去分类。

这种方法之所以称为生成方法,是因为模型表示了给定输入X产生输出Y的生成关系。生成模型一般被用在基于随机生成的观察值建模(特别是给定某些隐藏参数)的情况下。
典型的有:朴素贝叶斯法、马尔科夫模型、高斯混合模型。这种方法一般建立在统计学和Bayes理论的基础之上。

3 优缺点

两种方法各有优缺点,适合于不同条件的学习问题。

生成方法的特点

  • 生成方法学习联合概率密度分布P(X,Y),所以可以从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度,但不关心到底划分各类的那个分类边界在哪;
  • 生成方法可以还原出联合概率分布P(Y|X),而判别方法不能;
  • 生成方法的学习收敛速度更快,即当样本容量增加的时候,学到的模型可以更快的收敛于真实模型;
  • 当存在隐变量时,仍可以用生成方法学习,此时判别方法不能用;
  • 研究类内部问题更加灵活;
  • 对数据不完整,适应更好;
  • 学习计算更加复杂;
  • 倾向于得到false positive.

判别方法的特点

  • 判别方法直接学习的是决策函数Y=f(X)或者条件概率分布P(Y|X),不能反映训练数据本身的特性;
  • 寻找不同类别之间的最优分类面,反映的是异类数据之间的差异;
  • 直接面对预测,往往学习的准确率更高;
  • 由于直接学习P(Y|X)或P(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题;
  • 不能得到每一类的特征;
  • 变量关系不清晰,不可视。

4 联系

由生成模型可以得到判别模型,由判别模型得不到生成模型。

(1)训练时,二者优化准则不同
生成模型优化训练数据的联合分布概率;
判别模型优化训练数据的条件分布概率,判别模型与序列标记问题有较好的对应性。

(2)对于观察序列的处理不同
生成模型中,观察序列作为模型的一部分;
判别模型中,观察序列只作为条件,因此可以针对观察序列设计灵活的特征。

(3)训练复杂度不同
判别模型训练复杂度较高。

(4)是否支持无指导训练
生成模型支持无监督训练。

(5)本质区别
判别模型估计的是条件概率分布 p(class|context)
生成模型估计的是联合概率分布 p(class, context)=p(class|context)*p(context)

5 栗子

例如有一个输入数据x,任务是将其分类为标签y。

生成模型学习联合概率分布p(x,y),而判别模型学习条件概率分布p(y|x)。

现已有以下(x,y)形式的数据:(1,0), (1,0), (2,0), (2, 1)

那么p(x,y)是:

    y=0   y=1

    -----------

x=1 | 1/2   0

x=2 | 1/4   1/4

而p(y|x) 是:

    y=0   y=1

    -----------

x=1 | 1     0

x=2 | 1/2   1/2

为了将样本x分类到一个类y,最自然的做法是条件概率分布p(y|x),这就是为什么直接求p(y|x)方法叫做判别算法。而生成算法求p(x,y),可以通过贝叶斯方法转化为p(y|x),然后再用其分类。但p(x,y)还有其他作用,比如可以用它去生成(x,y)对。

再假如任务是识别一个语音属于哪种语言。对面一个人走过来,说了一句话,要想识别出他说的到底是汉语、英语还是法语等。可以有两种方法达到这个目的:

  • 学习每一种语言,花了大量精力把汉语、英语和法语等都学会了。然后再有人过来说话,就可以知道他说的是什么语言。

  • 不去学习每一种语言,只学习这些语言模型之间的差别,然后再分类。因为汉语和英语等语言的发音是有差别的,只要学会这种差别就行。

那么第一种方法就是生成方法,第二种方法是判别方法。

生成模型尝试去找到底这个数据是怎么生成的(产生的),然后再对一个信号进行分类。基于生成假设,哪个类别最有可能产生这个信号,这个信号就属于那个类别。
判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。

本篇博客整理自:
生成模型和判别模型
机器学习基础: 生成模型和判别模型
统计机器学习 - 李航

你可能感兴趣的:(机器学习,生成模型,判别模型,区别,联系,概率)