欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-21 16:24:10
...

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)对。

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

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

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

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

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

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