生成模型和判别模型的区别

前言

** 机器学习中有两种大类的模型,分别是生成模型和判别模型,其分别代表了不同的预测思想,我们这里讨论一下两者的异同。**
如有谬误,请联系指正。转载请注明出处。

联系方式:
e-mail: FesianXu@163.com
QQ: 973926198
github: https://github.com/FesianXu


机器学习的目标

首先,我们先要讨论整个机器学习的目标,在应用中最常见到的分类问题中,我们需要根据现有样本xiRnx_i \in R^n预测出其标签yi{0,1,,m}y_i \in \{ 0,1,\dots,m\},因此我们可以选择学习出条件概率P(yixi),xiRn,yi{0,1, .m}P(y_i|x_i), x_i \in R^n, y_i \in \{0,1,\dots.m\},如softmax分类器logistic回归,亦是或者学习出样本特征xix_i到标签yiy_i的直接映射(比起前者没有概率,而是直接的一个结果),如感知器PerceptronSVM支持向量机。学习出了条件概率或者是其映射之后,我们就可以根据其样本特征xix_i预测其标签了yiy_i


生成模型 or 判别模型

这里,我们直接给出两者的定义:

判别模型: 模型直接学习出条件概率P(yixi)P(y_i|x_i),模型包括kNN,感知机,决策树,逻辑回归,最大熵模型,SVM,提升方法,条件随机场,神经网络,···

生成模型: 模型学习出联合概率分布P(x,y)P(x,y),然后根据贝叶斯公式,得出条件概率分布P(yx)=P(x,y)iP(x,yi)P(y|x) = \frac{P(x,y)}{\sum_iP(x,y_i)},模型包括朴素贝叶斯法、隐马尔科夫模型、混合高斯模型、AODE、Latent Dirichlet allocation(unsup)、Restricted Boltzmann Machine,···


于是,两者的区别就是是否需要学习出联合概率分布P(x,y)P(x,y)
我们这里举一个维基百科里面的例子:

假如我们现在有四个样本:(x,y)={(0,0),(0,0),(1,0),(1,1)}(x,y)=\{(0,0), (0,0), (1,0), (1,1)\}

在判别模型眼中:
P(YX)P(Y|X)

y=0 y=1
x=0 1 0
x=1 1/2 1/2

而在生成模型眼中:P(X,Y)P(X,Y)

y=0 y=1
x=0 1/2 0
x=1 1/4 1/4

而在博客《机器学习之判别式模型和生成式模型》中,举了一个很好的例子描述这两者的区别,这里引用如下:

判别模型:要确定一个羊是山羊还是绵羊,用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。

生成模型:利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。


Reference

  1. Generative Model Wikipedia
  2. 知乎, 机器学习“判定模型”和“生成模型‘有什么区别?
  3. 机器学习之判别式模型和生成式模型
posted @ 2018-09-20 14:05  FesianXu  阅读(135)  评论(0编辑  收藏  举报