5 (机器学习理论)请列举生成模型与判别模型的区别

生成模型学习联合概率分布,再用贝叶斯
判别模型直接学习条件概率分布

简单地说,对于监督学习,预测时,一般都是在求生成模型: 从数据中学习联合概率分布,然后利用贝叶斯公式求:; 这类典型的模型包括:朴素贝叶斯、LDA、HMM
判别模型:直接学习, 它直观输入什么特征X,就直接预测出最可能的; 典型的模型包括:LR, SVM,CRF,Boosting,Decision tree….

判别模型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。

小结:判别模型是对条件概率建模,生成模型是对联合概率建模。判别模型一般就是直接解决分类或者序列标注问题(毕竟就是用来判定类别的嘛),而生成模型用来描述数据的产生过程,但某些判别模型通过一些变化,是可以用来解决分类(或者序列标注)问题的。

Leave a Reply

Your email address will not be published. Required fields are marked *