根据网上的相关博客总结了一下机器学习中的这两个概念,参考博客见文末。html
生成模型:无穷样本==》几率密度模型 = 生成模型==》预测
判别模型:有限样本==》判别函数 = 预测模型==》预测算法
机器学习中的模型通常分为两类:判别模型、生成模型,这是对问题的两种不一样的审视角度。网络
假设咱们要学习一个算法区分大象和狗(假设输入是重量、鼻子长度等特征)。判别模型和生成模型以两种不一样的思路解决这个问题:app
判别模型:根据训练集,找到一个两种动物的一个差异(决策边界),而后根据输入的特征(好比重量,鼻子长度等)看这个特种落在决策边界的哪一边机器学习
生成模型:根据大象的特征,学习一个大象的模型(总结一个大象长什么样的规律),而后也学习一个狗的模型,为了分类一个新的物种,咱们看这个物种和哪一个模型更加匹配函数
形式化的描述两种模型性能
直接学习的是决策函数y = f(x) 或者条件几率p(y|x) (或者输入X和label{0,1}的一种映射关系),利用正负例和分类标签,关注在判别模型的边缘分布。更多用来直接解决给定的问题,而不侧重于建模。建模的目标是 学习
主要特色:寻找不一样类别之间的最优分类面,反映的是异类数据之间的差别.net
优势是:设计
分类边界更灵活,比使用纯几率方法或生产模型获得的更高级
能清晰的分辨出多类或某一类与其余类之间的差别特征
在聚类、viewpoint changes, partial occlusion and scale variations中的效果较好
适用于较多类别的识别
判别模型的性能比生成模型要简单,比较容易学习
缺点是:
不能反映训练数据自己的特性,能力有限,能够告诉你的是1仍是2,但没办法把整个场景描述出来
形式和结构上不如生成式模型优雅
相似于黑盒,变量之间的关系不明确
常见判别模型:逻辑回归,svm,传统的神经网络,Nearest Neighbor,GRF(条件随机场),LDA(线性判别分析),Boosting, 线性回归,k近邻,最大熵模型
---------------------------------------------------------------
学习的是联合几率p(x,y), 因为p(x,y) = p(x|y)*p(y), 即咱们须要学习的是p(x|y)和p(y), 就上面给的例子,若是y表示一个动物是狗(y=0)或者大象(y=1),那么p(x|y=0)对狗的特征进行建模,p(x|y=1)是对大象的特征进行建模,p(y)能够假设其服从伯努利分布(由于y只有0,1两种取值)。建模目标以下:
上面的式子之因此能够忽略p(x),由于对训练集的输入x来讲p(x)是一个常量 本文地址
模型训练好之后对于输入的x,咱们能够根据一下贝叶斯公式来计算P(y|x), 而后看p(y=0|x)和p(y=1|x)哪一个较大,就划分给那一类
(即生成模型和判别模型的最终目标都是p(y|x),只不过生成模型的目标转换成了另外一种形式)
主要特色:通常主要是对后验几率建模,从统计的角度表示数据的分布状况,可以反映同类数据自己的类似度; 只关注本身的 inclass 自己,不关心到底 decision boundary 在哪
优势:
实际上带的信息要比判别模型丰富,有更强的解释力
研究单类问题比判别模型灵活性强
模型能够经过增量学习获得
能用于数据不完整的状况
缺点:
学习和计算过程比较复杂
常见生成模型:GDA(高斯判别分析),朴素贝叶斯,贝叶斯网络,Mixtures of Multinomials,高斯混合模型,Mixtures of Experts,隐马尔科夫模型,Sigmoidal Belief Networks,马尔科夫随机场,LDA(潜在狄立克雷分配)
----------------------------------------------------------
下面是全文转zouxy09的文章生成模型与判别模型,讲的很详细
一直在看论文的过程当中遇到这个问题,折腾了很多时间,而后是下面的一点理解,不知道正确否。如有错误,还望各位前辈不吝指正,以避免小弟一错再错。在此谢过。
1、决策函数Y=f(X)或者条件几率分布P(Y|X)
监督学习的任务就是从数据中学习一个模型(也叫分类器),应用这一模型,对给定的输入X预测相应的输出Y。这个模型的通常形式为决策函数Y=f(X)或者条件几率分布P(Y|X)。
决策函数Y=f(X):你输入一个X,它就输出一个Y,这个Y与一个阈值比较,根据比较结果断定X属于哪一个类别。例如两类(w1和w2)分类问题,若是Y大于阈值,X就属于类w1,若是小于阈值就属于类w2。这样就获得了该X对应的类别了。
条件几率分布P(Y|X):你输入一个X,它经过比较它属于全部类的几率,而后输出几率最大的那个做为该X对应的类别。例如:若是P(w1|X)大于P(w2|X),那么咱们就认为X是属于w1类的。
因此上面两个模型均可以实现对给定的输入X预测相应的输出Y的功能。实际上经过条件几率分布P(Y|X)进行预测也是隐含着表达成决策函数Y=f(X)的形式的。例如也是两类w1和w2,那么咱们求得了P(w1|X)和P(w2|X),那么实际上判别函数就能够表示为Y= P(w1|X)/P(w2|X),若是Y大于1或者某个阈值,那么X就属于类w1,若是小于阈值就属于类w2。而一样,很神奇的一件事是,实际上决策函数Y=f(X)也是隐含着使用P(Y|X)的。由于通常决策函数Y=f(X)是经过学习算法使你的预测和训练数据之间的偏差平方最小化,而贝叶斯告诉咱们,虽然它没有显式的运用贝叶斯或者以某种形式计算几率,但它实际上也是在隐含的输出极大似然假设(MAP假设)。也就是说学习器的任务是在全部假设模型有相等的先验几率条件下,输出极大似然假设。
因此呢,分类器的设计就是在给定训练数据的基础上估计其几率模型P(Y|X)。若是能够估计出来,那么就能够分类了。可是通常来讲,几率模型是比较难估计的。给一堆数给你,特别是数很少的时候,你通常很难找到这些数知足什么规律吧。那可否不依赖几率模型直接设计分类器呢?事实上,分类器就是一个决策函数(或决策面),若是可以从要解决的问题和训练样本出发直接求出判别函数,就不用估计几率模型了,这就是决策函数Y=f(X)的伟大使命了。例如支持向量机,我已经知道它的决策函数(分类面)是线性的了,也就是能够表示成Y=f(X)=WX+b的形式,那么咱们经过训练样原本学习获得W和b的值就能够获得Y=f(X)了。还有一种更直接的分类方法,它不用事先设计分类器,而是只肯定分类原则,根据已知样本(训练样本)直接对未知样本进行分类。包括近邻法,它不会在进行具体的预测以前求出几率模型P(Y|X)或者决策函数Y=f(X),而是在真正预测的时候,将X与训练数据的各种的Xi比较,和哪些比较类似,就判断它X也属于Xi对应的类。
实际上,说了那么多,也不知道本身表达清楚了没有。那咱们是谈生成模型和判别模型,上面到底啰嗦了那么多到底有啥阴谋啊?呵呵,往下说就知道了。
2、生成方法和判别方法
监督学习方法又分生成方法(Generative approach)和判别方法(Discriminative approach),所学到的模型分别称为生成模型(Generative Model)和判别模型(Discriminative Model)。我们先谈判别方法,由于它和前面说的都差很少,比较容易明白。
判别方法:由数据直接学习决策函数Y=f(X)或者条件几率分布P(Y|X)做为预测的模型,即判别模型。基本思想是有限样本条件下创建判别函数,不考虑样本的产生模型,直接研究预测模型。典型的判别模型包括k近邻,感知级,决策树,支持向量机等。
生成方法:由数据学习联合几率密度分布P(X,Y),而后求出条件几率分布P(Y|X)做为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。基本思想是首先创建样本的联合几率几率密度模型P(X,Y),而后再获得后验几率P(Y|X),再利用它进行分类,就像上面说的那样。注意了哦,这里是先求出P(X,Y)才获得P(Y|X)的,而后这个过程还得先求出P(X)。P(X)就是你的训练数据的几率分布。哎,刚才说了,须要你的数据样本很是多的时候,你获得的P(X)才能很好的描述你数据真正的分布。例如你投硬币,你试了100次,获得正面的次数和你的试验次数的比多是3/10,而后你直觉告诉你,可能不对,而后你再试了500次,哎,此次正面的次数和你的试验次数的比可能就变成4/10,这时候你半信半疑,不相信上帝还有一个手,因此你再试200000次,这时候正面的次数和你的试验次数的比(就能够当成是正面的几率了)就变成5/10了。这时候,你就以为很靠谱了,以为本身就是那个上帝了。呵呵,真啰嗦,还差点离题了。
还有一个问题就是,在机器学习领域有个约定俗成的说法是:不要去学那些对这个任务没用的东西。例如,对于一个分类任务:对一个给定的输入x,将它划分到一个类y中。那么,若是咱们用生成模型:p(x,y)=p(y|x).p(x)
那么,咱们就须要去对p(x)建模,但这增长了咱们的工做量,这让咱们很不爽(除了上面说的那个估计获得P(X)可能不太准确外)。实际上,由于数据的稀疏性,致使咱们都是被强迫地使用弱独立性假设去对p(x)建模的,因此就产生了局限性。因此咱们更趋向于直观的使用判别模型去分类。
这样的方法之因此称为生成方法,是由于模型表示了给定输入X产生输出Y的生成关系。用于随机生成的观察值建模,特别是在给定某些隐藏参数状况下。典型的生成模型有:朴素贝叶斯和隐马尔科夫模型等。
3、生成模型和判别模型的优缺点
在监督学习中,两种方法各有优缺点,适合于不一样条件的学习问题。
生成方法的特色:上面说到,生成方法学习联合几率密度分布P(X,Y),因此就能够从统计的角度表示数据的分布状况,可以反映同类数据自己的类似度。但它不关心到底划分各种的那个分类边界在哪。生成方法能够还原出联合几率分布P(Y|X),而判别方法不能。生成方法的学习收敛速度更快,即当样本容量增长的时候,学到的模型能够更快的收敛于真实模型,当存在隐变量时,仍能够用生成方法学习。此时判别方法就不能用。
判别方法的特色:判别方法直接学习的是决策函数Y=f(X)或者条件几率分布P(Y|X)。不能反映训练数据自己的特性。但它寻找不一样类别之间的最优分类面,反映的是异类数据之间的差别。直接面对预测,每每学习的准确率更高。因为直接学习P(Y|X)或P(X),能够对数据进行各类程度上的抽象、定义特征并使用特征,所以能够简化学习问题。
4、生成模型和判别模型的联系
由生成模型能够获得判别模型,但由判别模型得不到生成模型。
5、再形象点能够吗
例如咱们有一个输入数据x,而后咱们想将它分类为标签y。(迎面走过来一我的,你告诉我这个是男的仍是女的)
生成模型学习联合几率分布p(x,y),而判别模型学习条件几率分布p(y|x)。
下面是个简单的例子:
例如咱们有如下(x,y)形式的数据:(1,0), (1,0), (2,0), (2, 1)
那么p(x,y)是:
y=0 y=1
-----------
x=1 | 1/2 0
x=2 | 1/4 1/4
而p(y|x) 是:
y=0 y=1
-----------
x=1| 1 0
x=2| 1/2 1/2
咱们为了将一个样本x分类到一个类y,最天然的作法就是条件几率分布p(y|x),这就是为何咱们对其直接求p(y|x)方法叫作判别算法。而生成算法求p(x,y),而p(x,y)能够经过贝叶斯方法转化为p(y|x),而后再用其分类。可是p(x,y)还有其余做用,例如,你能够用它去生成(x,y)对。
再假如你的任务是识别一个语音属于哪一种语言。例如对面一我的走过来,和你说了一句话,你须要识别出她说的究竟是汉语、英语仍是法语等。那么你能够有两种方法达到这个目的:
一、学习每一种语言,你花了大量精力把汉语、英语和法语等都学会了,我指的学会是你知道什么样的语音对应什么样的语言。而后再有人过来对你哄,你就能够知道他说的是什么语音,你就能够骂他是“米国人仍是小日本了”。(呵呵,切勿将政治掺杂在技术里面)
二、不去学习每一种语言,你只学习这些语言模型之间的差异,而后再分类。意思是指我学会了汉语和英语等语言的发音是有差异的,我学会这种差异就行了。
那么第一种方法就是生成方法,第二种方法是判别方法。
生成算法尝试去找到底这个数据是怎么生成的(产生的),而后再对一个信号进行分类。基于你的生成假设,那么那个类别最有可能产生这个信号,这个信号就属于那个类别。判别模型不关心数据是怎么生成的,它只关心信号之间的差异,而后用差异来简单对给定的一个信号进行分类。
6、对于跟踪算法
跟踪算法通常来讲能够分为两类:基于外观模型的生成模型或者基于外观模型的判别模型。
生成模型:通常是学习一个表明目标的模型,而后经过它去搜索图像区域,而后最小化重构偏差。相似于生成模型描述一个目标,而后就是模式匹配了,在图像中找到和这个模型最匹配的区域,就是目标了。
判别模型:将跟踪问题当作一个二分类问题,而后找到目标和背景的决策边界。它无论目标是怎么描述的,那只要知道目标和背景的差异在哪,而后你给一个图像,它看它处于边界的那一边,就归为哪一类。
参考:
判别模型和生成模型 -- ML Step By Step(4)
【版权声明】转载请注明出处:http://www.cnblogs.com/TenosDoIt/p/3721074.html