生成模型和判别模型(Generative model, Discriminative model)
监督学习的任务是学习一个模型,对给定的输入预测相应的输出。这个模型一般形式为决策函数Y=f(X)或者条件概率分布P(Y|X)。有一种分类就把模型分为:Generative Modeling (生成模型)和Discriminative Modeling (判别模型)两种。生成模型是由训练数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型。常见的生成模型有PCA,Kmeans,Naive Bayesian和HMM。
判别模型是由训练数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测的模型,模型关心的是对给定的输入X,应该预测什么样的输出Y,与GM的不同在于不需要先学习出联合分布P(X,Y)。典型的判别模型有 KNN、Logistic Regression,Linear Regression、Decision Tree、SVM、AdaBoost和条件随机场等。
生成模型对数据集的分布有严格的假设,对于outliers会很敏感。而判别模型不关心数据集的分布,只需要学习得到分类的规则,对outliers相对不敏感。
模型 | 生成模型 | 判别模型 |
---|---|---|
数据集大小 | 小 | 大 |
数据分布 | 有严格的要求 | 不关心 |
学习目标 | 估计概率 | 分类规则 |
对于判别式模型来说求得P(Y|X),对未见示例X,根据P(Y|X)可以求得标记Y,即可以直接判别出来,如上图的左边所示,实际是就是直接得到了判别边界,所以传统的、耳熟能详的机器学习算法如线性回归模型、支持向量机SVM等都是判别式模型,这些模型的特点都是输入属性X可以直接得到Y(对于二分类任务来说,实际得到一个score,当score大于threshold时则为正类,否则为反类)(根本原因个人认为是对于某示例X_1,对正例和反例的标记的条件概率之和等于1,即P(Y_1|X_1)+P(Y_2|X_1)=1)
对于生成式模型求得P(Y,X),对于未见示例X,你要求出X与不同标记之间的联合概率分布,然后大的获胜,如上图右边所示,并没有什么边界存在,对于未见示例(红三角),求两个联合概率分布(有两个类),比较一下,取那个大的。机器学习中朴素贝叶斯模型、隐马尔可夫模型HMM等都是生成式模型,熟悉Naive Bayes的都知道,对于输入X,需要求出好几个联合概率,然后较大的那个就是预测结果~(根本原因个人认为是对于某示例X_1,对正例和反例的标记的联合概率不等于1,即P(Y_1,X_1)+P(Y_2,X_1)<1,要遍历所有的X和Y的联合概率求和,即sum(P(X,Y))=1,具体可参见楼上woodyhui提到的维基百科Generative model里的例子)
博文机器学习之判别式模型和生成式模型 - nolonely - 博客园 举了一个例子:判别式模型举例:要确定一个羊是山羊还是绵羊,用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。生成式模型举例:利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。
举例
通过voice pitch 来判断是男声还是女声。
判决模型,只需要根据voice pitch,即特征,学习得到一个threshold。通过特征在threshold的左边还是右边来判断。
生成模型,需要对男声和女声的voice pitch的分布进行统计。然后通过比较特征在男声分布和女声分布的得分来判断。
对于outliers,生成模型,无法得到正确的分布,性能会较差。
Logistic regression和Naive bayes
Logistic regression和Naive bayes都是对特征的线性表达
Logistic regression和Naive bayes建模的都是条件概率,对所最终求得的不同类的结果有很好的解释性。而不像SVM,神经网络这样解释性不高。
不同点
Logistic regression在有相关性feature上面学习得到的模型在测试数据的performance更好。也就是说,logistic regression在训练时,不管特征之间有没有相关性,它都能找到最优的参数。而在Naive bayes中,由于我们给定特征直接相互独立的严格设定,在有相关性的feature上面学习到的权重同时变大或变小,它们之间的权重不会相互影响。从这方面来说,如果能够在对参数较好地控制,在损失项方面处理的很好的话,Logistic regression相对Naive bayes在应用时更不会限制在特征工程(feature engineering)上面。
Naive bayes的好处是我没有优化参数这一步,通过训练数据我直接得到一个counting table,这些有助于并行化。
Andrew Ng和Michael Jordan在2001年发了一篇NIPS短文《 On Discriminative vs. Generative classifiers: A comparison of logistic regression and naive Bayes 》,他们把这两个模型用在各种数据集上面进行测试,最后得到在小数据上面Naive bayes可以取得更好的效果,随着数据的增多、特征维度的增大,Logistic regression的效果更好。这也是因为Naive bayes是生成模型,在有prior的情况下模型能够把数据fit的更好,而Logistic regression属于判别模型,不对联合概率建模,通过训练数据直接预测输出,因此在数据足够多的情况下能够得到更好一些的效果。
来源:oschina
链接:https://my.oschina.net/u/4304562/blog/3216538