希望能生动形象地指出两者的区别。
最基本的区别就是建模对象不同, 但目的都是求出P(Y|X)
判别模型Discriminative Model:
直接对P(Y|X)进行建模, 判别模型不考虑如何生成 X 和 Y 的联合事件, 比如 SVM 只考虑把点分开而已, 鲁棒性比较强, 但需要更多的训练数据.
生成模型 Generative Model:
利用贝叶斯公式, 先对P(X|Y)进行建模, 然后利用训练集中的 P(Y) 求出联合**概率分布 P(X,Y)**, 最后除以X的概率分布P(X)得出我们的目标(P(Y|X)). 最常见的例子朴素贝叶斯. 生成模型需要做出更多的假设, 因此适用于数据较少的情况下, 但鲁棒性不强, 因为假设错了就效果很差了.
给一个栗子, 外星人来地球拿了一个数据集包含了地球人的身体特征, 标签有2类:男和女. 如果训练数据集只有1%是数据是男性, 而99%是女性. 那么外星人科学家就有可能认为给定随机一个人类, 该人类是女性的P(y=female)概率是99%, 按照这个假设去做生成模型就会很不给力, 但判别模型就没有这个问题.
我感觉可以直接从名字上看。
所谓判别模型(Discriminative Model),也就是说模型可以直接用来判别事物的。这里所说的判别事物,最典型的就是做分类,当然还有做序列标注。既然直接可以用来分类,也就是说我们可以在已知属性的条件下,对该记录进行判断。所以,判别模型是对条件概率进行的建模,也就是p(Y|X)
。这里X
就是属性集合,实际上就是一个向量;而Y
则可能是一个值(此时对应分类问题), 可能是一个向量(此时对应序列标注问题)。针对分类问题,最典型的判别模型就属logistic regression
了;而序列标注问题的典型判别模型则是CRF(条件随机场)
。
下面说一说生成模型(Generative Model)。生成模型说的是,这个模型可以描述数据的生成过程。换句话说,已知了这个模型,我们就可以产生该模型描述的数据。而数据由两部分组成,也就是(X,Y)
,前者是特征,后者则是类别(Y
是标量)或者序列类别(Y
是向量)。要描述整个数据,也就是要对p(X,Y)
进行建模,所以是对联合概率进行建模。有了联合概率,我们就可以模拟产生数据样本了。生成模型本身不是做分类或者序列标注的,但是可以用来解决这些问题。最典型的使用生成模型解决分类的模型要数naive bayes
了,它是对p(X,Y)
进行的建模的。
要分类,就要计算p(Y|X)
,所以使用贝叶斯定理做转换,变成p(X,Y)/p(X)
。然后p(X)
看成常数,实际上该模型最终还是归结到计算P(X,Y)
上去了。类似的,在序列标注问题中,使用的最著名的生成模型就是HMM
了。本质上和naive bayes
是一样的,不过Y
变成多维的了。
看待生成模型,思路不要局限在分类(或者是序列标注)上面。前面说到,生成模型是可以用来描述数据产生的过程的(这一点跟判别模型很不一样!)。虽然naive bayes
和HMM
用在标注(分类或者序列标注)上,但还有很多很多的生成模型不是这样的用途,最典型的就是著名的LDA
了(以及一大坨的概率图模型(PGM)),它描述了文档集合数据的产生过程,可以用来做unsupervised learning
。
小结:判别模型是对条件概率建模,生成模型是对联合概率建模。判别模型一般就是直接解决分类或者序列标注问题(毕竟就是用来判定类别的嘛),而生成模型用来描述数据的产生过程,但某些判别模型通过一些变化,是可以用来解决分类(或者序列标注)问题的。