全文转自https://blog.youkuaiyun.com/danieljianfeng/article/details/41896323
在看论文和机器学习教材的时候,经常会看到生成模型和判别模型,一致对着两个模型概念很模糊,在这里自己做一个小结。
在后面介绍这个两个模型时,我们以分类问题为例,以加深理解。我们都知道,分类问题可以分为两个阶段:推理阶段(inference stage)和决策阶段(decision stage)。
推理阶段:利用训练数据学习得到一个可以计算 的模型。
决策阶段:利用在推理阶段得到的后验概率预测数据的类别。
当然不是所有的分类模型都分为这两个阶段,比如判别函数(discriminative function),它会把两个阶段何在一起,直接学习从输入数据x到类别的映射。
1. 例子
我们先来看一个例子,从宏观上了解生成模型和判别模型的区别。
我们的任务是判断一个动物是大象(y=1)还是小狗(y=0)。判别模型是先从训练数据中学习得到判别大象和小狗的决策面(decision boundary),有了这个决策面之后,如果需要分类一个新动物是大象还是小狗,只需要判断它在决策面的哪一边。
另一种方法是生成模型,我们首先观察大象,根据其特征学习一个大象的模型,同样的我们学习得到一个小狗的模型。当我们判别一个新动物时,分别和大象模型和小狗模型比较,哪个动物更像就认为新动物为那个类。
2. 生成模型
在生成模型中,我们首先需要得到每一个类的条件概率(class-conditional density) ,以及先验概率(prior class probability)
,然后通过贝叶斯定理得到
我们都知道,贝叶斯定理中的分母可以表示成 ,这在每个类别的后验概率中都是一样的,所以我们可以之间计算联合分布
,在通过normalize得到后验概率。到目前为止,我们已经得到了后验概率,有了它我们就可是决策理论来决定输入的x属于那个类。比如,输入x,我们计算x关于每一类的后验概率,哪个后验概率最大,就把x归为那个类。
3. 判别模型
判别模型直接学习后验概率 ,然后利用决策理论判断输入数据属于哪个类,逻辑回归(logistic regression)和感知机(perceptron algorithm)就是典型的判别模型。
4. 判别函数
判别函数和判别模型在名字上非常的像,但存在一定的区别,生成模型和判别模型都是从概率的角度进行预测,而判别函数不涉及概率,而是从训练数据中直接学习得到输入数据x到类别的映射,而且把推理阶段和决策阶段合在一起进行。
现在举一个二分类问题的例子,f(.)是一个二值函数,当f=0时表示类别1,f=1时表示类别2,这个函数f就是判别函数,它可以把输入数据映射到0和1两个类。
5. 总结
生成模型的要求比较高,需要学习得到输入数据x和类别的联合分布。在实际的应用中,x的维度往往非常的高,只有在非常大的训练数据下我们才能得到比较合理的类条件分布(class-conditional distribution)。庆幸地是,先验概率 比较容易计算,只需计算训练样本中每一类数据占整个训练数据的百分比。虽然生成模型的计算比较复杂,需要学习每一个类的分布,但就可以反映同一类数据本身的一些特点。
如果仅仅是处理分类问题,已知 ,就可以很好的解决这个问题,生成模型需要计算类条件概率和先验概率,这就增加的计算量。相反,判别模型就是直接去求解 ,学习不同类别之间的最优分类面,反映不同类数据之间的差异。但这类模型不能反映数据本身的特点,只能告诉你该数据属于哪个类,而不能反映整个场景的情况。
最简单的判别函数只是学到从输入空间到类别空间的一个映射,不涉及任何的概率,因此该方法不能量化该数据属于某个类的可能性。此外,该方法把推理阶段和决策阶段的任务合在一起进行,但在实际过程中我们需要更加不同的应用选择不同的决策方法。
6. 参考
Bishop《PRML》
Andrew Ng, handout of《machine learning》